nydp 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/bin/nydp +1 -1
- data/lib/lisp/core-010-precompile.nydp +0 -1
- data/lib/lisp/core-015-documentation.nydp +7 -10
- data/lib/lisp/core-020-utils.nydp +2 -2
- data/lib/lisp/core-030-syntax.nydp +35 -8
- data/lib/lisp/core-035-flow-control.nydp +50 -0
- data/lib/lisp/core-037-list-utils.nydp +38 -0
- data/lib/lisp/core-040-utils.nydp +26 -257
- data/lib/lisp/core-041-string-utils.nydp +28 -0
- data/lib/lisp/core-042-date-utils.nydp +5 -0
- data/lib/lisp/core-043-list-utils.nydp +157 -0
- data/lib/lisp/core-060-benchmarking.nydp +105 -96
- data/lib/lisp/core-090-hook.nydp +4 -1
- data/lib/lisp/tests/list-tests.nydp +34 -0
- data/lib/lisp/tests/orequal-examples.nydp +20 -0
- data/lib/nydp.rb +17 -34
- data/lib/nydp/builtin.rb +0 -3
- data/lib/nydp/core.rb +1 -1
- data/lib/nydp/function_invocation.rb +47 -0
- data/lib/nydp/plugin.rb +33 -0
- data/lib/nydp/symbol.rb +8 -8
- data/lib/nydp/tokeniser.rb +26 -14
- data/lib/nydp/version.rb +1 -1
- data/lib/nydp/vm.rb +4 -0
- metadata +9 -2
@@ -0,0 +1,28 @@
|
|
1
|
+
(chapter-start 'string-manipulation "utilities for manipulating strings")
|
2
|
+
|
3
|
+
(def string-strip (txt)
|
4
|
+
(string-replace "(^\\s+|\\s+$)" "" txt))
|
5
|
+
|
6
|
+
(def joinstr (txt . things)
|
7
|
+
; flatten 'things into a single list (ie unnest lists)
|
8
|
+
; convert each item to a string
|
9
|
+
; return a single string which is the concatenation of each
|
10
|
+
; stringified item, with given 'txt inserted in between
|
11
|
+
; each item
|
12
|
+
(let joinables (flatten things)
|
13
|
+
(apply +
|
14
|
+
(to-string (car joinables))
|
15
|
+
(flatten (zip (map (fn (_) txt) (cdr joinables))
|
16
|
+
(map to-string (cdr joinables)))))))
|
17
|
+
|
18
|
+
(def j items
|
19
|
+
; delegate to 'joinstr with an empty join string
|
20
|
+
; shortcut for (joinstr "" items)
|
21
|
+
(joinstr "" items))
|
22
|
+
|
23
|
+
(def string-pieces pieces
|
24
|
+
; string-interpolation syntax emits this form. Default implementation
|
25
|
+
; is to delegate to 'j , but containing forms may use macros that
|
26
|
+
; override this in order to provide specific interpolation behaviour
|
27
|
+
; (for example, formatting numbers or stripping HTML tags)
|
28
|
+
(j pieces))
|
@@ -0,0 +1,157 @@
|
|
1
|
+
(chapter-start 'list-manipulation)
|
2
|
+
|
3
|
+
(def list-length (things)
|
4
|
+
(if (no things) 0
|
5
|
+
(atom? things) 1
|
6
|
+
(+ 1 (list-length:cdr things))))
|
7
|
+
|
8
|
+
(def list-slices (things slice-size)
|
9
|
+
; slice 'things into a list of lists each with maximum 'slice-size items
|
10
|
+
(chapter pagination)
|
11
|
+
(if (< (len things) slice-size)
|
12
|
+
(cons things nil)
|
13
|
+
(cons (firstn slice-size things)
|
14
|
+
(list-slices (nthcdr slice-size things)
|
15
|
+
slice-size))))
|
16
|
+
|
17
|
+
(def intersperse (inbetween things)
|
18
|
+
; return a new list with 'inbetween in between every element of 'things
|
19
|
+
(if (and (pair? things) (cdr things))
|
20
|
+
(apply list (car things) inbetween
|
21
|
+
(intersperse inbetween (cdr things)))
|
22
|
+
things))
|
23
|
+
|
24
|
+
(def intersperse-splicing (inbetween things)
|
25
|
+
; expects 'things a list of lists, joins the lists
|
26
|
+
; placing 'inbetween in between each list.
|
27
|
+
; For example (intersperse-splicing 'X '((a b) (c d) (e f)))
|
28
|
+
; returns (a b X c d X e f)
|
29
|
+
(apply joinlists (intersperse (list inbetween) things)))
|
30
|
+
|
31
|
+
(def collect (f things)
|
32
|
+
; if 'things is a list, return all the items in the list for which 'f returns non-nil
|
33
|
+
; otherwise, return 'things if (f things) is non-nil
|
34
|
+
; otherwise, nil
|
35
|
+
(rfnwith collector (items things)
|
36
|
+
(if (no items)
|
37
|
+
nil
|
38
|
+
(pair? items)
|
39
|
+
(if (f (car items))
|
40
|
+
(cons (car items)
|
41
|
+
(collector (cdr items)))
|
42
|
+
(collector (cdr items)))
|
43
|
+
(f items)
|
44
|
+
items)))
|
45
|
+
|
46
|
+
(def reject (f things)
|
47
|
+
; return all the items in 'things for which 'f returns nil
|
48
|
+
(collect !f things))
|
49
|
+
|
50
|
+
(def nth (n things)
|
51
|
+
; returns the n-th item in the list 'things
|
52
|
+
(if (eq? n 0)
|
53
|
+
(car things)
|
54
|
+
(nth (- n 1) (cdr things))))
|
55
|
+
|
56
|
+
(mac each (var things code)
|
57
|
+
; repeatedly assigns an element of 'things to 'var,
|
58
|
+
; and executes 'code each time
|
59
|
+
(w/uniq (xs c)
|
60
|
+
`((rfn ,c (,xs)
|
61
|
+
(if (pair? ,xs)
|
62
|
+
(do
|
63
|
+
(let ,var (car ,xs) ,code)
|
64
|
+
(,c (cdr ,xs)))))
|
65
|
+
,things)))
|
66
|
+
|
67
|
+
(def reduce (f things)
|
68
|
+
((rfn rd (acc list)
|
69
|
+
(if (pair? list)
|
70
|
+
(rd (f acc (car list))
|
71
|
+
(cdr list))
|
72
|
+
acc))
|
73
|
+
(car things) (cdr things)))
|
74
|
+
|
75
|
+
(def proper? (list)
|
76
|
+
; t if this is a proper list (last cdr is nil)
|
77
|
+
; nil otherwise (last cdr is neither cons nor nil)
|
78
|
+
(or (no list)
|
79
|
+
(and (pair? list)
|
80
|
+
(proper? (cdr list)))))
|
81
|
+
|
82
|
+
(def firstn (n things)
|
83
|
+
; returns the first 'n items in the list 'things
|
84
|
+
(if (eq? n 0) nil
|
85
|
+
(cons (car things)
|
86
|
+
(firstn (- n 1)
|
87
|
+
(cdr things)))))
|
88
|
+
|
89
|
+
(def nthcdr (n things)
|
90
|
+
; returns the nth cdr of the list 'things
|
91
|
+
(if (> n 0)
|
92
|
+
(nthcdr (- n 1) (cdr things))
|
93
|
+
things))
|
94
|
+
|
95
|
+
(def joinlists (things . more-thingses)
|
96
|
+
; return a new list which is the concatenation of all the given lists
|
97
|
+
; 'things is a list
|
98
|
+
; 'more-thingses is a list of lists
|
99
|
+
; call like this: (joinlists '(a b c) '(x y z) '(1 2 3))
|
100
|
+
(if things
|
101
|
+
(cons (car things)
|
102
|
+
(apply joinlists
|
103
|
+
(cdr things)
|
104
|
+
more-thingses))
|
105
|
+
more-thingses
|
106
|
+
(apply joinlists more-thingses)))
|
107
|
+
|
108
|
+
(def detect (f things)
|
109
|
+
; if 'f is a function,
|
110
|
+
; if 'things is a list, return the first item in the list for which 'f returns non-nil
|
111
|
+
; otherwise, return 'things if (f things) is non-nil
|
112
|
+
; otherwise, nil
|
113
|
+
; if 'f is not a function, self-invoke with a function checking for equality with f
|
114
|
+
;
|
115
|
+
; WARNING: if the detected thing is nil, returns t instead. A return value of nil
|
116
|
+
; means the thing was not found ; non-nil means the thing was found, including when
|
117
|
+
; the found thing is itself nil.
|
118
|
+
(if (isa 'fn f)
|
119
|
+
(rfnwith d (items things)
|
120
|
+
(if (pair? items)
|
121
|
+
(let it (car items)
|
122
|
+
(or
|
123
|
+
(and (f it)
|
124
|
+
(or it t))
|
125
|
+
(d:cdr items)))
|
126
|
+
(f items)
|
127
|
+
items))
|
128
|
+
(detect (curry eq? f)
|
129
|
+
things)))
|
130
|
+
|
131
|
+
(def tuples (n things)
|
132
|
+
;; split things into a list of lists each n long
|
133
|
+
(rfnwith _ (list things)
|
134
|
+
(if (no list)
|
135
|
+
nil
|
136
|
+
(cons (firstn n list) (_ (nthcdr n list))))))
|
137
|
+
|
138
|
+
(def range (start stop)
|
139
|
+
; return a list containing the range
|
140
|
+
; of elements starting with 'start, up
|
141
|
+
; to but not including 'stop
|
142
|
+
(if (< start stop)
|
143
|
+
(cons start
|
144
|
+
(range (+ start 1)
|
145
|
+
stop))))
|
146
|
+
|
147
|
+
(def best (f things)
|
148
|
+
(if (no things)
|
149
|
+
nil
|
150
|
+
(let winner (car things)
|
151
|
+
(each thing (cdr things)
|
152
|
+
(if (f thing winner)
|
153
|
+
(= winner thing)))
|
154
|
+
winner)))
|
155
|
+
|
156
|
+
(def min things (best < things))
|
157
|
+
(def max things (best > things))
|
@@ -21,103 +21,112 @@
|
|
21
21
|
(p "================================================\n")
|
22
22
|
"~desc : total ~(just times), average ~(/ times repeats) per run"))
|
23
23
|
|
24
|
-
(assign a 1)
|
25
|
-
(assign b 1)
|
26
|
-
|
27
|
-
(def bm-add-globals () (+ a b))
|
28
|
-
|
29
|
-
(def bm-lc-0 () 0)
|
30
|
-
(def bm-lc-1 (a) a)
|
31
|
-
(def bm-lc-2 (a b) (a b))
|
32
|
-
(def bm-lc-3 (a b c) (a b c))
|
33
|
-
(def bm-lc-4 (a b c d) (a b c d))
|
34
|
-
|
35
|
-
(def bm-lc-0R a a)
|
36
|
-
(def bm-lc-1R (a . b) (apply a b))
|
37
|
-
(def bm-lc-2R (a b . c) (apply a b c))
|
38
|
-
(def bm-lc-3R (a b c . d) (apply a b c d))
|
39
|
-
(def bm-lc-4R (a b c d . e) (apply a b c d e))
|
40
|
-
|
41
|
-
(def bm-plus-0 () (+))
|
42
|
-
(def bm-plus-1 (a) (+ a))
|
43
|
-
(def bm-plus-2 (a b) (+ a b))
|
44
|
-
(def bm-plus-3 (a b c) (+ a b c))
|
45
|
-
|
46
|
-
(def bm-
|
47
|
-
(def bm-
|
48
|
-
|
49
|
-
(def bm-
|
50
|
-
(def bm-
|
51
|
-
|
52
|
-
(def bm-
|
53
|
-
(def bm-
|
54
|
-
|
55
|
-
(def bm-plus-
|
56
|
-
|
57
|
-
(def bm-
|
58
|
-
(def bm-
|
59
|
-
(def bm-
|
60
|
-
(def bm-
|
61
|
-
(def bm-
|
62
|
-
|
63
|
-
(def bm-
|
64
|
-
(def bm-
|
65
|
-
(def bm-
|
66
|
-
(def bm-
|
67
|
-
(def bm-
|
68
|
-
|
69
|
-
(def bm-
|
70
|
-
|
71
|
-
(def bm-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
(
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
24
|
+
;; (assign a 1)
|
25
|
+
;; (assign b 1)
|
26
|
+
|
27
|
+
;; (def bm-add-globals () (+ a b))
|
28
|
+
|
29
|
+
;; (def bm-lc-0 () 0)
|
30
|
+
;; (def bm-lc-1 (a) a)
|
31
|
+
;; (def bm-lc-2 (a b) (a b))
|
32
|
+
;; (def bm-lc-3 (a b c) (a b c))
|
33
|
+
;; (def bm-lc-4 (a b c d) (a b c d))
|
34
|
+
|
35
|
+
;; (def bm-lc-0R a a)
|
36
|
+
;; (def bm-lc-1R (a . b) (apply a b))
|
37
|
+
;; (def bm-lc-2R (a b . c) (apply a b c))
|
38
|
+
;; (def bm-lc-3R (a b c . d) (apply a b c d))
|
39
|
+
;; (def bm-lc-4R (a b c d . e) (apply a b c d e))
|
40
|
+
|
41
|
+
;; (def bm-plus-0 () (+))
|
42
|
+
;; (def bm-plus-1 (a) (+ a))
|
43
|
+
;; (def bm-plus-2 (a b) (+ a b))
|
44
|
+
;; (def bm-plus-3 (a b c) (+ a b c))
|
45
|
+
;; (def bm-f-1 (a) (a))
|
46
|
+
;; (def bm-f-2 (a b) (a b))
|
47
|
+
;; (def bm-f-3 (a b c) (a b c))
|
48
|
+
|
49
|
+
;; (def bm-0-arg-times-call () (*))
|
50
|
+
;; (def bm-1-arg-times-call () (* 23))
|
51
|
+
;; (def bm-2-arg-times-call () (* 23 24))
|
52
|
+
;; (def bm-3-arg-times-call () (* 23 24 25))
|
53
|
+
;; (def bm-4-arg-times-call () (* 23 24 25 26))
|
54
|
+
|
55
|
+
;; (def bm-plus-0-call () (bm-plus-0))
|
56
|
+
;; (def bm-plus-1-call () (bm-plus-1 1))
|
57
|
+
;; (def bm-plus-2-call () (bm-plus-2 1 2))
|
58
|
+
;; (def bm-plus-3-call () (bm-plus-3 1 2 3))
|
59
|
+
;; (def bm-f-1-call () (for i 0 10 (bm-f-1 +)))
|
60
|
+
;; (def bm-f-2-call () (for i 0 10 (bm-f-2 + 2)))
|
61
|
+
;; (def bm-f-3-call () (for i 0 10 (bm-f-3 + 2 3)))
|
62
|
+
|
63
|
+
;; (def bm-0-lc-call () (bm-lc-0))
|
64
|
+
;; (def bm-1-lc-call () (bm-lc-1 +))
|
65
|
+
;; (def bm-2-lc-call () (bm-lc-2 + 1))
|
66
|
+
;; (def bm-3-lc-call () (bm-lc-3 + 1 2))
|
67
|
+
;; (def bm-4-lc-call () (bm-lc-4 + 1 2 3))
|
68
|
+
|
69
|
+
;; (def bm-0R-lc-call () (bm-lc-0R +))
|
70
|
+
;; (def bm-1R-lc-call () (bm-lc-1R + 1))
|
71
|
+
;; (def bm-2R-lc-call () (bm-lc-2R + 1 2))
|
72
|
+
;; (def bm-3R-lc-call () (bm-lc-3R + 1 2 3))
|
73
|
+
;; (def bm-4R-lc-call () (bm-lc-4R + 1 2 3 4))
|
74
|
+
|
75
|
+
;; (def bm-complicated-0 (a b c) (a (+ 1 b) (+ 1 c)))
|
76
|
+
|
77
|
+
;; (def bm-complicated ()
|
78
|
+
;; (bm-complicated-0 +
|
79
|
+
;; (bm-complicated-0 * 3 (bm-complicated-0 + 3 6))
|
80
|
+
;; (bm-complicated-0 - 10 (bm-complicated-0 - 13 8))))
|
81
|
+
|
82
|
+
;; (def bm-pre-compile-test ()
|
83
|
+
;; (for i 1 10
|
84
|
+
;; (pre-compile (dox-src rbs))))
|
85
|
+
|
86
|
+
;; (def bm-hash-fill
|
87
|
+
;; (let h {}
|
88
|
+
;; (=h.aa 1) (=h.ab 2) (=h.ac 3) (=h.ba 4) (=h.bb 5) (=h.bc 6)
|
89
|
+
;; (=h.ca 1) (=h.cb 2) (=h.cc 3) (=h.ca 4) (=h.cb 5) (=h.cc 6)
|
90
|
+
;; (=h.da 1) (=h.db 2) (=h.dc 3) (=h.da 4) (=h.db 5) (=h.dc 6)
|
91
|
+
;; (=h.aa 1) (=h.ab 2) (=h.ac 3) (=h.ba 4) (=h.bb 5) (=h.bc 6)
|
92
|
+
;; (=h.ca 1) (=h.cb 2) (=h.cc 3) (=h.ca 4) (=h.cb 5) (=h.cc 6)
|
93
|
+
;; (=h.da 1) (=h.db 2) (=h.dc 3) (=h.da 4) (=h.db 5) (=h.dc 6)
|
94
|
+
;; (list (list h.aa h.ab h.ac h.ba h.bb h.bc)
|
95
|
+
;; (list h.aa h.ab h.ac h.ba h.bb h.bc)
|
96
|
+
;; (list h.ca h.cb h.cc h.ca h.cb h.cc)
|
97
|
+
;; (list h.da h.db h.dc h.da h.db h.dc)
|
98
|
+
;; (list h.aa h.ab h.ac h.ba h.bb h.bc)
|
99
|
+
;; (list h.ca h.cb h.cc h.ca h.cb h.cc)
|
100
|
+
;; (list h.da h.db h.dc h.da h.db h.dc)
|
101
|
+
;; (list h.da h.ab h.ac h.ba h.bb h.bc))))
|
96
102
|
|
97
103
|
(def rbs (name)
|
98
104
|
(let summary nil
|
99
|
-
;; (push (bm "pythag
|
100
|
-
;; (push (bm "recursive
|
101
|
-
(push (bm "global vars
|
102
|
-
(push (bm "0 arg times
|
103
|
-
(push (bm "1 arg times
|
104
|
-
(push (bm "2 arg times
|
105
|
-
(push (bm "SYM
|
106
|
-
(push (bm "SYM LEX
|
107
|
-
(push (bm "SYM LEX LEX
|
108
|
-
(push (bm "SYM LEX LEX LEX
|
109
|
-
;; (push (bm "3 arg times" bm-3-arg-times-call 10 100000) summary)
|
110
|
-
;; (push (bm "4 arg times" bm-4-arg-times-call 10 100000) summary)
|
111
|
-
;; (push (bm "0R arg lexical-vars" bm-0R-lc-call
|
112
|
-
;; (push (bm "1R arg lexical-vars" bm-1R-lc-call
|
113
|
-
;; (push (bm "2R arg lexical-vars" bm-2R-lc-call
|
114
|
-
;; (push (bm "3R arg lexical-vars" bm-3R-lc-call
|
115
|
-
;; (push (bm "4R arg lexical-vars" bm-4R-lc-call
|
116
|
-
;; (push (bm "0 arg lexical-vars
|
117
|
-
;; (push (bm "1 arg lexical-vars
|
118
|
-
;; (push (bm "2 arg lexical-vars
|
119
|
-
;; (push (bm "3 arg lexical-vars
|
120
|
-
;; (push (bm "4 arg lexical-vars
|
121
|
-
;; (push (bm "hashing"
|
122
|
-
;; (push (bm "pre-compile" bm-pre-compile-test 10
|
105
|
+
;; (push (bm "pythag " bm-pythag 5 10) summary)
|
106
|
+
;; (push (bm "recursive " bm-complicated 5 1000) summary)
|
107
|
+
;; (push (bm "global vars " bm-add-globals 10 50000) summary)
|
108
|
+
;; (push (bm "0 arg times " bm-0-arg-times-call 10 50000) summary)
|
109
|
+
;; (push (bm "1 arg times " bm-1-arg-times-call 10 50000) summary)
|
110
|
+
;; (push (bm "2 arg times " bm-2-arg-times-call 10 50000) summary)
|
111
|
+
;; (push (bm "SYM " bm-plus-0-call 10 50000) summary)
|
112
|
+
;; (push (bm "SYM LEX " bm-plus-1-call 10 50000) summary)
|
113
|
+
;; (push (bm "SYM LEX LEX " bm-plus-2-call 10 50000) summary)
|
114
|
+
;; (push (bm "SYM LEX LEX LEX " bm-plus-3-call 10 50000) summary)
|
115
|
+
;; (push (bm "3 arg times " bm-3-arg-times-call 10 100000) summary)
|
116
|
+
;; (push (bm "4 arg times " bm-4-arg-times-call 10 100000) summary)
|
117
|
+
;; (push (bm "0R arg lexical-vars " bm-0R-lc-call 10 50000) summary)
|
118
|
+
;; (push (bm "1R arg lexical-vars " bm-1R-lc-call 10 50000) summary)
|
119
|
+
;; (push (bm "2R arg lexical-vars " bm-2R-lc-call 10 50000) summary)
|
120
|
+
;; (push (bm "3R arg lexical-vars " bm-3R-lc-call 10 50000) summary)
|
121
|
+
;; (push (bm "4R arg lexical-vars " bm-4R-lc-call 10 50000) summary)
|
122
|
+
;; (push (bm "0 arg lexical-vars " bm-0-lc-call 10 50000) summary)
|
123
|
+
;; (push (bm "1 arg lexical-vars " bm-1-lc-call 10 50000) summary)
|
124
|
+
;; (push (bm "2 arg lexical-vars " bm-2-lc-call 10 50000) summary)
|
125
|
+
;; (push (bm "3 arg lexical-vars " bm-3-lc-call 10 50000) summary)
|
126
|
+
;; (push (bm "4 arg lexical-vars " bm-4-lc-call 10 50000) summary)
|
127
|
+
;; (push (bm "hashing " bm-hash-fill 10 200000) summary)
|
128
|
+
;; (push (bm "pre-compile " bm-pre-compile-test 10 10000) summary)
|
129
|
+
;; (push (bm "LEX " bm-f-1-call 10 10000) summary)
|
130
|
+
;; (push (bm "LEX LEX " bm-f-2-call 10 10000) summary)
|
131
|
+
;; (push (bm "LEX LEX LEX " bm-f-3-call 10 10000) summary)
|
123
132
|
(each s summary (p name " " s))))
|
data/lib/lisp/core-090-hook.nydp
CHANGED
@@ -8,9 +8,12 @@
|
|
8
8
|
(def add-hook (hook-name f)
|
9
9
|
(hash-cons hooks hook-name f))
|
10
10
|
|
11
|
+
(def clear-hooks (hook-name)
|
12
|
+
(= hooks.,hook-name nil))
|
13
|
+
|
11
14
|
(def remove-hook (hook-name f)
|
12
15
|
(= hooks.,hook-name
|
13
|
-
(
|
16
|
+
(collect (curry !eq? f)
|
14
17
|
hooks.,hook-name)))
|
15
18
|
|
16
19
|
(def run-hooks (hook-name . args)
|
@@ -37,6 +37,10 @@
|
|
37
37
|
(joinlists '(a b c) '(x y z) '(1 2 3))
|
38
38
|
(a b c x y z 1 2 3))
|
39
39
|
|
40
|
+
("nil disappears"
|
41
|
+
(apply joinlists '( (a b c) (d e f) nil (j k l) ) )
|
42
|
+
(a b c d e f j k l))
|
43
|
+
|
40
44
|
("joins three lists without recursing"
|
41
45
|
(joinlists '(a b c) '(x (y1 y2 y3) z) '(1 2 (3 3 3)))
|
42
46
|
(a b c x (y1 y2 y3) z 1 2 (3 3 3))))
|
@@ -132,3 +136,33 @@
|
|
132
136
|
("three lists and an extra big"
|
133
137
|
(list-slices '(a b c d e f g h i j k) 3)
|
134
138
|
((a b c) (d e f) (g h i) (j k))))
|
139
|
+
|
140
|
+
(examples-for assoc
|
141
|
+
("finds nothing in an empty list"
|
142
|
+
(assoc 'foo nil)
|
143
|
+
nil)
|
144
|
+
|
145
|
+
("finds nothing in a non-list"
|
146
|
+
(assoc 'foo 'bar)
|
147
|
+
nil)
|
148
|
+
|
149
|
+
("finds nothing for nonexistent key"
|
150
|
+
(assoc 'z '((a b) (c d)))
|
151
|
+
nil)
|
152
|
+
|
153
|
+
("finds value corresponding to given key"
|
154
|
+
(assoc 'c '((a b) (c d)))
|
155
|
+
(c d)))
|
156
|
+
|
157
|
+
(examples-for alref
|
158
|
+
("finds nothing in an empty list"
|
159
|
+
(alref 'foo nil)
|
160
|
+
nil)
|
161
|
+
|
162
|
+
("finds nothing for nonexistent key"
|
163
|
+
(alref 'z '((a b) (c d)))
|
164
|
+
nil)
|
165
|
+
|
166
|
+
("finds value corresponding to given key"
|
167
|
+
(alref 'c '((a b) (c d)))
|
168
|
+
d))
|