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> |
||