aboutsummaryrefslogtreecommitdiff
path: root/scheme/utils.scm
blob: d17f20c900f589058cf644a7c0601694fa27e1a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(define (fold f acc xs)
  (if (null? xs)
    acc
    (fold f (f acc (car xs)) (cdr xs))))

(define (sum xs) (fold + 0 xs))

(define (range start stop step)
  (if (>= start stop)
    '()
    (cons start (range (+ start step) stop step))))

(define (filter predicate xs)
  (if (null? xs)
    '()
    (let* ((x (car xs))
           (filtered (filter predicate (cdr xs))))
      (if (predicate x) (cons x filtered) filtered))))