aboutsummaryrefslogtreecommitdiff
path: root/src/lisp/std.lisp
blob: c723a136b2654aae24263cdaf0b3408247e95c14 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
(define (caar ls) (car (car ls)))
(define (caaar ls) (car (caar ls)))
(define (caaaar ls) (car (caaar ls)))
(define (caaaaar ls) (car (caaaar ls)))

(define (cddr ls) (cdr (cdr ls)))
(define (cdddr ls) (cdr (cddr ls)))
(define (cddddr ls) (cdr (cdddr ls)))
(define (cdddddr ls) (cdr (cddddr ls)))

(define (null? ls) (eq? ls '()))

(define (length ls)
  (if (null? ls)
    0
    (+ 1 (length (cdr ls)))))

(define (fold init accumulator ls)
  (if (null? ls)
    init
    (fold (accumulator init (car ls))
          accumulator
          (cdr ls))))

(define (sum ls) (fold 0 + ls))
(define (product ls) (fold 1 * ls))