36 lines
763 B
Scheme
36 lines
763 B
Scheme
|
;;; 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))))))
|
||
|
|