Skip to content

Commit d254181

Browse files
committed
kernel: list comprehension in 1D
1 parent f0c2367 commit d254181

File tree

1 file changed

+43
-8
lines changed

1 file changed

+43
-8
lines changed

src/kernel.min

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,7 @@
8282

8383
(export length
8484
reverse
85-
append
86-
map1)
85+
append)
8786

8887
(define (non-list-error name x)
8988
(raise-argument-error name "list?" x))
@@ -119,9 +118,45 @@
119118
[else (non-list-error 'append (car xss))]))]))
120119

121120
(define (map1 f xs)
122-
(if (null? xs)
123-
'()
124-
(let loop ([xs xs] [ys '()])
125-
(if (null? xs)
126-
(reverse ys)
127-
(loop (cdr xs) (cons (f (car xs)) ys))))))
121+
(cond
122+
[(null? xs) '()]
123+
[(null? (cdr xs)) (list (f (car xs)))]
124+
[else
125+
(let loop ([xs xs] [ys '()])
126+
(if (null? xs)
127+
(reverse ys)
128+
(loop (cdr xs) (cons (f (car xs)) ys))))]))
129+
130+
(define (foreach1 f xs)
131+
(cond
132+
[(null? xs) (void)]
133+
[(null? (cdr xs))
134+
(f (car xs))
135+
(void)]
136+
[else
137+
(let loop ([xs xs])
138+
(unless (null? xs)
139+
(f (car xs))
140+
(loop (cdr xs))))]))
141+
142+
(define (andmap1 f xs)
143+
(cond
144+
[(null? xs) #t]
145+
[(null? (cdr xs)) (if (f (car xs)) #t #f)]
146+
[else
147+
(let loop ([xs xs])
148+
(cond
149+
[(null? xs) #t]
150+
[(f (car xs)) (loop (cdr xs))]
151+
[else #f]))]))
152+
153+
(define (ormap1 f xs)
154+
(cond
155+
[(null? xs) #f]
156+
[(null? (cdr xs)) (if (f (car xs)) #t #f)]
157+
[else
158+
(let loop ([xs xs])
159+
(cond
160+
[(null? xs) #f]
161+
[(f (car xs)) #t]
162+
[else (loop (cdr xs))]))]))

0 commit comments

Comments
 (0)