4

述語「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)
4

1 に答える 1

5

これはSeq.takeWhileF#で呼び出されます(述語がfalseを返した場合は、シーケンスを停止します)。

使用例:

let search p f solutionSpace =
    solutionSpace |> Seq.map (fun x -> f x, x)
                  |> Seq.takeWhile (fun (c, s) -> not (p c))
                  |> Seq.minBy (fun (c, _) -> c)
于 2011-04-13T18:29:04.537 に答える