私はいくつかの基本的なデータ構造とそれで動作するアルゴリズムの実装を見直しています。1つの再帰関数と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
ヴァル結果:私は挿入ソートための慣用F#コードは非常に似ている推測INTリスト= [-6。 -3; 0; 1; 2; 3; 3; 4; 5; 8]
私はList.foldBackで実装しようとしていましたが、以下のように再帰関数が1つしかなく、正しい結果を得られませんでしたか?問題がどこにあるのか誰でも分かりますか?
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'は使われていません... – kvb
@kvb、oop ...今すぐ入手しました。非常に感謝します!私は投稿する前にそれを見つけただろう。 – 1B4T
@cfj FWIW、私はいつも私が質問している問題を示していることを確認するために投稿する前に、サンプルコードをテストしようとすると、私は何か他のものを流したことはありません。時間を節約する。 :-) –