述語「p」が与えられると、それは解が十分に良いかどうかを示します。可能な解決策がどれほど優れているかを示すコスト関数「f」と、一連の可能な解決策の中から「最良の」(つまり最低のコスト)ソリューションを検索する関数。評価をキャンセルする慣用的な方法(述語が現在のソリューションが「十分に良い」ことを保証する場合)はどのようになりますか。
つまり、そのようなもの:
let search p f solutionSpace =
solutionSpace |> Seq.map (fun x -> f x, x)
|> Seq.ignoreAllFollowingElementsWhenPredicateIsTrue (fun (c, s) -> p c)
|> Seq.minBy (fun (c, _) -> c)