((_ 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))]))