diff options
Diffstat (limited to 'src/lisp/std.lisp')
-rw-r--r-- | src/lisp/std.lisp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/lisp/std.lisp b/src/lisp/std.lisp new file mode 100644 index 0000000..c723a13 --- /dev/null +++ b/src/lisp/std.lisp | |||
@@ -0,0 +1,26 @@ | |||
1 | (define (caar ls) (car (car ls))) | ||
2 | (define (caaar ls) (car (caar ls))) | ||
3 | (define (caaaar ls) (car (caaar ls))) | ||
4 | (define (caaaaar ls) (car (caaaar ls))) | ||
5 | |||
6 | (define (cddr ls) (cdr (cdr ls))) | ||
7 | (define (cdddr ls) (cdr (cddr ls))) | ||
8 | (define (cddddr ls) (cdr (cdddr ls))) | ||
9 | (define (cdddddr ls) (cdr (cddddr ls))) | ||
10 | |||
11 | (define (null? ls) (eq? ls '())) | ||
12 | |||
13 | (define (length ls) | ||
14 | (if (null? ls) | ||
15 | 0 | ||
16 | (+ 1 (length (cdr ls))))) | ||
17 | |||
18 | (define (fold init accumulator ls) | ||
19 | (if (null? ls) | ||
20 | init | ||
21 | (fold (accumulator init (car ls)) | ||
22 | accumulator | ||
23 | (cdr ls)))) | ||
24 | |||
25 | (define (sum ls) (fold 0 + ls)) | ||
26 | (define (product ls) (fold 1 * ls)) | ||