diff options
Diffstat (limited to 'src/lisp/std.lisp')
-rw-r--r-- | src/lisp/std.lisp | 15 |
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 '()))) | ||