答案 0 :(得分:10)
答案 1 :(得分:1)
这是一个解决方案'a list list -> Seq<'a list>
来计算n个列表的笛卡尔乘积,并进行惰性求值。我把它写成了Python的itertools.product
let product lists =
let folder list state =
state |> Seq.allPairs list |> Seq.map List.Cons
Seq.singleton List.empty |> List.foldBack folder lists
它基于F {4.0中引入的List.allPairs
。
答案 2 :(得分:0)
这是第一次尝试列表版本。我认为它可以清理一下。
let rec cart nll =
let f0 n nll =
match nll with
| [] -> [[n]]
| _ -> List.map (fun nl->n::nl) nll
match nll with
| [] -> []
| h::t -> List.collect (fun n->f0 n (cart t)) h