;; return all combinations of set
;; of subsets (size of set)
(define combinations
(lambda (s size)
(if (= 0 size) '()
(flatten-1 (map (lambda (x)
(let ((res (combinations (list-tail s (+ 1 (cl:position x s))) (- size 1))))
(if (null? res) (list x)
(map (lambda (y)
(if (list? y) (list* x y) (list x y)))
(flatten-1 res)))))
(list-head s (- (length s) ( - size 1))))))))