aboutsummaryrefslogtreecommitdiffstats
path: root/util.scm
diff options
context:
space:
mode:
authorGravatar Peter McGoron 2024-09-04 02:16:10 -0400
committerGravatar Peter McGoron 2024-09-04 02:16:10 -0400
commitc510054119dfe97c6e265f4ba8f3dd8c98f0edd8 (patch)
tree8f2f9ff7d11e9bfa35e86106a3252a4cac902dd9 /util.scm
parentset:refactor maps (diff)
trie: add with test
Diffstat (limited to 'util.scm')
-rw-r--r--util.scm35
1 files changed, 35 insertions, 0 deletions
diff --git a/util.scm b/util.scm
new file mode 100644
index 0000000..fa361f7
--- /dev/null
+++ b/util.scm
@@ -0,0 +1,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))))))
+