jugando con 'funciones de extensión' para el módulo de lista. (pasé bastante tiempo en desarrollo 'mapfold' - que se rosca un acumulador como pliegue, pero lo utiliza como un parámetro para crear nuevos valores como mapa - luego descubrieron que eso es lo que List.scan_left
hace)producto cruzado de dos listas
Para la generación de prueba de datos, que tenía que hacer un producto vectorial de dos listas, esto es lo que ocurrió:
///Perform cross product of two lists, return tuple
let crossproduct l1 l2 =
let product lst v2 = List.map (fun v1 -> (v1, v2)) lst
List.map_concat (product l1) l2
¿es esta la buena, o hay ya alguna forma mejor de hacer esto?
La misma pregunta para éste:
///Perform cross product of three lists, return tuple
let crossproduct3 l1 l2 l3 =
let tuplelist = crossproduct l1 l2 //not sure this is the best way...
let product3 lst2 v3 = List.map (fun (v1, v2) -> (v1, v2, v3)) lst2
List.map_concat (product3 tuplelist) l3
Consulte la pregunta relacionada aquí: http://stackoverflow.com/questions/935996/calculating-the-cartesian-product-of-a-list-of-numbers-with-f – Benjol