Cartesian product of two or more lists: Difference between revisions

Content added Content deleted
(add Tailspin solution)
(Ocaml example using fold)
Line 1,866: Line 1,866:
product' [] [1;2];;
product' [] [1;2];;
(*- : ('a * int) list = []*)
(*- : ('a * int) list = []*)
</lang>
Implemented using nested folds:
<lang ocaml>
let cart_prod l1 l2 =
List.fold_left (fun acc1 ele1 ->
List.fold_left (fun acc2 ele2 -> (ele1,ele2)::acc2) acc1 l1) [] l ;;

cart_prod [1; 2; 3] ['a'; 'b'; 'c'] ;;
(* - : (char * int) list = [('c', 3); ('c', 2); ('c', 1); ('b', 3); ('b', 2); ('b', 1); ('a', 3); ('a', 2); ('a', 1)]*)
cart_prod [1; 2; 3] [] ;;
(*- : ('a * int) list = [] *)
</lang>
</lang>