2011-04-13 2 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

아 ... 덕분에, 내가 .. 내가 더 잘해야한다 같아요 :) –

관련 문제