aboutsummaryrefslogtreecommitdiff
path: root/src/lisp/std.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lisp/std.lisp')
-rw-r--r--src/lisp/std.lisp15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/lisp/std.lisp b/src/lisp/std.lisp
index 6c5beed..a256125 100644
--- a/src/lisp/std.lisp
+++ b/src/lisp/std.lisp
@@ -40,6 +40,13 @@
40 (cons (func (car ls)) 40 (cons (func (car ls))
41 (map func (cdr ls))))) 41 (map func (cdr ls)))))
42 42
43(define (zip l1 l2)
44 (if (or (null? l1)
45 (null? l2))
46 '()
47 (cons (cons (car l1) (car l2))
48 (zip (cdr l1) (cdr l2)))))
49
43(define (filter pred ls) 50(define (filter pred ls)
44 (if (null? ls) 51 (if (null? ls)
45 '() 52 '()
@@ -57,3 +64,11 @@
57 64
58(define (sum ls) (fold 0 + ls)) 65(define (sum ls) (fold 0 + ls))
59(define (product ls) (fold 1 * ls)) 66(define (product ls) (fold 1 * ls))
67
68(define (reverse ls)
69 (begin
70 (define (rev-helper p acc)
71 (if (null? p)
72 acc
73 (rev-helper (cdr p) (cons (car p) acc))))
74 (rev-helper ls '())))