Я хочу рассчитать powerset набора.Поскольку мне не нужен весь блок питания одновременно, лучше генерировать его лениво.
Например:
powerset (set ["a"; "b"; "c"]) =
seq {
set [];
set ["a"];
set ["b"];
set ["c"];
set ["a"; "b"];
set ["a"; "c"];
set ["b"; "c"];
set ["a";"b"; "c"];
}
Поскольку результат представляет собой последовательность, я предпочитаю ее в указанном выше порядке.Как я могу сделать это в F #?
EDIT:
Это то, что я собираюсь использовать (основываясь на ответе BLUEPIXY):
let powerset s =
let rec loop n l =
seq {
match n, l with
| 0, _ -> yield []
| _, [] -> ()
| n, x::xs -> yield! Seq.map (fun l -> x::l) (loop (n-1) xs)
yield! loop n xs
}
let xs = s |> Set.toList
seq {
for i = 0 to List.length xs do
for x in loop i xs -> set x
}
Спасибо всем за отличный вклад.