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.lisp26
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))