aboutsummaryrefslogtreecommitdiffstats
path: root/util.scm
blob: fa361f7d76f109c062c5c6bf4106ca4d3a97d7d2 (plain) (blame)
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
27
28
29
30
31
32
33
34
35
;;; Utilities.

;;; ;;;;;;;;;;;;;;;;
;;; Versions of FOLD
;;; ;;;;;;;;;;;;;;;;

(define fold
  (lambda (f init lst)
    (if (null? lst)
        init
        (fold f (f (car lst) init) (cdr lst)))))

(define fold-vector
  (lambda (f init vec)
    (if (list? vec)                    ; Support MiniScheme
        (fold f init vec)
        (letrec
            ((loop
              (lambda (i val)
                (if (= i (vector-length vec))
                    val
                    (loop (+ i 1) (f (vector-ref vec i) val))))))
          (loop 0 init)))))

;;; ;;;;;;;;;;;;;;;;;;;;
;;; Misc. list functions
;;; ;;;;;;;;;;;;;;;;;;;;

(define all
  (lambda (f lst)
    (cond
      ((null? lst) #t)
      ((not (f (car lst))) #f)
      (else (all f (cdr lst))))))