Check for complete pattern matches
[scheme.git] / utils.scm
index e063b85d08625500f5bbeb6e124214d98a464688..ea8900f51cf989caa59fc9ed6d4168d354621545 100644 (file)
--- a/utils.scm
+++ b/utils.scm
     ((_ s) (let ([x (car s)])
             (set! s (cdr s))
             x))))
+
+(define (any p x)
+  (fold-left
+   (lambda (acc y) (if acc #t (p y)))
+   #f
+   x))
+
+(define (all xs) (fold-left (lambda (acc x) (and acc x)) #t xs))
+
+                                       ; (combinations '(1 2) '(3)) => '((1 3) (2 3))
+(define (combinations . lists)
+  (case (length lists)
+    [0 '()]
+    [1 (map (lambda (x) (list x)) (car lists))]
+    [else (flat-map (lambda (x)
+                     (map (lambda (y) (cons x y))
+                          (apply combinations (cdr lists)))) (car lists))]))