2011-04-13 47 views
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) 

回答

5

這被稱爲F#(當斷言返回false,停止序列)Seq.takeWhile。使用

例子:

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) 
+0

哦......非常感謝......這是在衆目睽睽下躲藏,我想..我應該多睡覺:) – 2011-04-13 18:52:54