考え方は、同じだけど、組合せの関数を使うもの。
let rec comb n l = match n, l with | 0, _ -> [[]] | _, [] -> [] | n, x::xs -> List.map (fun l -> x ::l) (comb (n - 1) xs) @ (comb n xs) let _ = let nums = List.rev ['0'..'9'] for i in 2..4 do comb i nums |> List.sort |> List.iter (fun x -> new string(List.toArray x) |> printfn "%s")
明後日は逆にビットカウントで組み合わせを作ってみてます。(24,5個から何個かとる組み合わせまでしかダメでしたが。)