Je suis en train d'examiner les implémentations pour certaines structures de données de base et les algorithmes qui les utilisent. Je suppose que le code idiomatiques F # pour insertion Trier est très semblable:Implémentation du tri par insertion avec une fonction récursive et une fonction foldBack
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
résultat val: int list = [-6; -3; 0; 1; 2; 3; 3; 4; 5; 8]
Alors que j'essayais de l'implémenter avec List.foldBack et une seule fonction récursive, comme ci-dessous, et ne pouvait pas me donner le résultat correct? Tout le monde peut comprendre où se situe le problème?
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 []
Dans votre branche 'else',' x' n'est pas utilisé ... – kvb
@kvb, oop ... l'a maintenant. Beaucoup apprécie! Je l'aurais repéré avant de poster. – 1B4T
@cfj FWIW, j'essaie toujours de tester n'importe quel exemple de code avant de poster pour m'assurer qu'il démontre le problème que je pose et que je n'ai pas bougé quoi que ce soit d'autre. Gain de temps :-) –