Witam,
potrzebuje pomocy w analizie kodu napisanego w F Sharp. Mam dwa krótkie programy do wyświetlania wszystkich permutacji i wszystkich kombinacji zbioru (w tym konkretnym przypadku tablicy). Jednak za bardzo nie znam składni tego języka. Czy mógł by ktoś wytłumaczyć po kolei co która funkcja robi, albo przepisać te programy w psedokodzie, tłumacząc jakie funkcje w f sharp za co odpowiadają i w jaki sposób działają?
Z góry dziękuje.
////////////////////////////////////////////////// PERMUTACJE
let permute xs =
let insert e xs =
List.fold (fun (a,l) x -> (e::x::l)::List.map (fun ys -> x::ys) a,x::l) ( [ [ e ] ] , [ ] ) xs |> fst
let rec _p xs sofar =
match xs with
| [] -> sofar
| h::t ->
_p t (List.fold (fun a x -> List.fold (fun s x -> x::s) a (insert h x)) sofar sofar)
_p xs [[]] |> List.sort |> List.tail
////////////////////////////////////////////////// KOMBINACJE
let combine xs =
let rec _p xs sofar =
match xs with
| [] -> sofar
| h::t ->
_p t (List.fold (fun a x -> (h::x)::a) sofar sofar)
_p xs [[]] |> List.rev |> List.tail