Si restituirebbe una nuova lista. Se sei veramente interessato al prodotto cartesiano delle liste, allora questo dovrebbe essere sufficiente:
let cartesian l l' =
List.concat (List.map (fun e -> List.map (fun e' -> (e,e')) l') l)
# cartesian ["a";"b"] ["c";"d"];;
- : (string * string) list = [("a", "c"); ("a", "d"); ("b", "c"); ("b", "d")]
Se avete bisogno di quella strana struttura piatta, invece, è possibile utilizzare un elenco di concatenazione aggiuntivo.
let flat_cartesian l l' =
List.concat (List.concat (
List.map (fun e -> List.map (fun e' -> [e;e']) l') l))
fonte
2012-06-05 08:06:22