Мне нужно сгенерировать перестановки в данном списке. Мне удалось сделать это вот так:
let rec Permute (final, arr) =
if List.length arr > 0 then
for x in arr do
let n_final = final @ [x]
let rest = arr |> List.filter (fun a -> not (x = a))
Permute (n_final, rest)
else
printfn "%A" final
let DoPermute lst =
Permute ([], lst)
DoPermute lst
С этим кодом возникают очевидные проблемы. Например, элементы списка должны быть уникальными. Кроме того, это более-менее такой же подход, который я бы использовал при создании прямой реализации на любом другом языке. Есть ли лучший способ реализовать это в F #.
Спасибо!