Skip to content

Commit 52e6923

Browse files
authored
Merge pull request #175 from dzoep/racket-list-deforestation
Racket list deforestation
2 parents f5d3d2e + c4185cf commit 52e6923

File tree

18 files changed

+1412
-921
lines changed

18 files changed

+1412
-921
lines changed
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
#lang scribble/doc
2+
@require[scribble/manual
3+
(for-label racket/list
4+
racket/base)]
5+
6+
@title{List Operations}
7+
8+
@defmodule[qi/list]
9+
10+
This module defines bindings that can leverage stream fusion /
11+
deforestation optimization when found in succession within a
12+
flow. When not part of optimized flow, their behavior is identical to
13+
the bindings of the same name from @racketmodname[racket/base] and
14+
@racketmodname[racket/list].
15+
16+
The bindings are categorized based on their intended usage inside the
17+
deforested pipeline.
18+
19+
@section{Producers}
20+
21+
@defproc*[(((range (end real?)) list?)
22+
((range (start real?) (end real?) (step real? 1)) list?))]{
23+
24+
Deforestable version of @racket[range] from @racketmodname[racket/list].
25+
26+
}
27+
28+
@section{Transformers}
29+
30+
@defproc[(filter (pred procedure?) (lst list?)) list?]{
31+
32+
Deforestable version of @racket[filter] from @racketmodname[racket/base].
33+
34+
}
35+
36+
@defproc[(map (proc procedure?) (lst list?) ...+) list?]{
37+
38+
Deforestable version of @racket[map] from @racketmodname[racket/base].
39+
40+
}
41+
42+
@defproc[(filter-map (proc procedure?) (lst list?) ...+) list?]{
43+
44+
Deforestable version of @racket[filter-map] from @racketmodname[racket/list].
45+
46+
}
47+
48+
@defproc*[(((take (lst list?) (pos exact-nonnegative-integer?)) list?)
49+
((take (lst any/c) (pos exact-nonnegative-integer?)) list?))]{
50+
51+
Deforestable version of @racket[take] from @racketmodname[racket/list].
52+
53+
}
54+
55+
@section{Consumers}
56+
57+
@defproc[(foldl (proc procedure?) (init any/c) (lst list?) ...+) any/c]{
58+
59+
Deforestable version of @racket[foldl] from @racketmodname[racket/base].
60+
61+
}
62+
63+
@defproc[(foldr (proc procedure?) (init any/c) (lst list?) ...+) any/c]{
64+
65+
Deforestable version of @racket[foldr] from @racketmodname[racket/base].
66+
67+
}
68+
69+
@defproc[(car (p pair?)) any/c]{
70+
71+
Deforestable version of @racket[car] from @racketmodname[racket/base].
72+
73+
}
74+
75+
@defproc[(cadr (v (cons/c any/c pair?))) any/c]{
76+
77+
Deforestable version of @racket[cadr] from @racketmodname[racket/base].
78+
79+
}
80+
81+
@defproc[(caddr (v (cons/c any/c (cons/c any/c pair?)))) any/c]{
82+
83+
Deforestable version of @racket[caddr] from @racketmodname[racket/base].
84+
85+
}
86+
87+
@defproc[(cadddr (v (cons/c any/c (cons/c any/c (cons/c any/c pair?))))) any/c]{
88+
89+
Deforestable version of @racket[cadddr] from @racketmodname[racket/base].
90+
91+
}
92+
93+
@defproc*[(((list-ref (lst list?) (pos exact-nonnegative-integer?)) any/c)
94+
((list-ref (lst pair?) (pos exact-nonnegative-integer?)) any/c))]{
95+
96+
Deforestable version of @racket[list-ref] from @racketmodname[racket/base].
97+
98+
}
99+
100+
@defproc[(length (lst list?)) exact-nonnegative-integer?]{
101+
102+
Deforestable version of @racket[length] from @racketmodname[racket/base].
103+
104+
}
105+
106+
@defproc[(empty? (v any/c)) boolean?]{
107+
108+
Deforestable version of @racket[empty?] from @racketmodname[racket/list].
109+
110+
}
111+
112+
@defproc[(null? (v any/c)) boolean?]{
113+
114+
Deforestable version of @racket[null?] from @racketmodname[racket/base].
115+
116+
}
117+
118+

qi-doc/scribblings/qi.scrbl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ This site hosts @emph{user} documentation. If you are interested in contributing
4040
@include-section["tutorial.scrbl"]
4141
@include-section["interface.scrbl"]
4242
@include-section["forms.scrbl"]
43+
@include-section["list-operations.scrbl"]
4344
@include-section["macros.scrbl"]
4445
@include-section["field-guide.scrbl"]
4546
@include-section["principles.scrbl"]

0 commit comments

Comments
 (0)