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

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

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

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