Cartesian product of two or more lists: Difference between revisions

m
\ replaced with lambdas
(Added scheme)
m (\ replaced with lambdas)
Line 3,483:
(if (or (zero? (length xs)) (zero? (length ys)))
'()
(fold append (map (\lambda (x) (map (\lambda (y) (list x y)) ys)) xs)))))
 
(define nary-cartesian-product (\lambda (ls)
(if (fold (\lambda (a b) (or a b)) (map (compose zero? length) ls))
'()
(map flatten (fold cartesian-product ls)))))