X-Git-Url: https://git.lukelau.me/?p=scheme.git;a=blobdiff_plain;f=utils.scm;fp=utils.scm;h=ea8900f51cf989caa59fc9ed6d4168d354621545;hp=e063b85d08625500f5bbeb6e124214d98a464688;hb=fff1029008b7399f597e0227fff2bf05b8a27b3c;hpb=f4b0d5c1b14a1890e1b88398e256b272595346b2 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))]))