X-Git-Url: http://git.lukelau.me/?p=scheme.git;a=blobdiff_plain;f=utils.scm;h=ea8900f51cf989caa59fc9ed6d4168d354621545;hp=e063b85d08625500f5bbeb6e124214d98a464688;hb=HEAD;hpb=8e106ca13666680051f91ab3f49ce2bd7e19ead7 diff --git a/utils.scm b/utils.scm index e063b85..ea8900f 100644 --- a/utils.scm +++ b/utils.scm @@ -25,3 +25,20 @@ ((_ 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))]))