aboutsummaryrefslogtreecommitdiff
path: root/src/lisp/std.lisp
diff options
context:
space:
mode:
authorAkshay <[email protected]>2021-03-30 12:22:15 +0100
committerAkshay <[email protected]>2021-03-30 12:22:15 +0100
commitdbcaa0df655bdd11c6d01ce28e018fc1e80ed394 (patch)
tree633510de5e3b43ff14143f72e7096265af659eef /src/lisp/std.lisp
parenta76cd56b9f8cce132555f6c3b59d76da5ae86f6b (diff)
better parse errors; include lisp stdlib
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))