Я рассматриваю реализации некоторых базовых структур данных и алгоритмы, работающие с ними. Я предполагаю, что идиоматический код F# для Сортировка вставками очень похож на:
let rec insert x = function
| [] -> [x]
| y::ys -> if x<=y then x::y::ys
else y::(insert x ys)
and insertionSort = function
| [] -> []
| x::xs -> insert x (insertionSort xs)
let myLst = [8;3;3;5;-6;0;1;4;-3;2]
let result = myLst |> insertionSort
val результат: int list = [-6; -3; 0; 1; 2; 3; 3; 4; 5; 8]
Пока я пытался реализовать это с помощью List.foldBack и только одной рекурсивной функции, как показано ниже, и не смог дать правильный результат? Кто-нибудь может понять, где проблема?
let rec anotherInsertionSort lst =
List.foldBack(fun x (ys:list<_>) ->
if ys.IsEmpty then [x]
elif x <= ys.Head then x::ys
else ys.Head::x::anotherInsertionSort ys.Tail) lst []
else
x
не используется... - person kvb   schedule 01.03.2012