2009-07-25 5 views
1
 
mySequence 
|> Seq.iteri (fun i x -> ...) 
... 

시퀀스 끝에 i를 어떻게 바인딩합니까? 즉, iteri에 의해 반복되는 반복 횟수를 나타내는 값을 어떻게 묶을 수 있습니까?시퀀스 끝에서 Seq.iteri를 사용하여 i를 바인딩하는 방법

물론 ref를 생성하고 모든 반복을 지정할 수는 있지만 더 우아한 방법이 있는지 궁금합니다.

Seq.iteri (fun i x -> ...) 

이 라인을 따라

Seq.fold (fun i x -> ... ; i+1) 0 

가되도록 당신은 를 사용할 수

답변

4

:

let aSeq = 
    seq { 
     for i in 1..10 do 
      printfn "eval %d" i 
      yield i 
    } 

let r = 
    aSeq 
    |> Seq.fold (fun i x -> 
     printfn "iter %d" x // or whatever is "..." 
     i+1) 0  

printfn "result: %d" r 
+0

나 폴드를 들어 정말 문제 해결에 접근하는 방식을 변경 기능 숙어 중 하나입니다 . 달빛이라면 그들과 함께 시간을 보내야합니다. – gradbot

+0

감사의 인사 gradbot, 격려 감사드립니다! – Moonlight

0

을 나는 직접 것입니다 그냥 기능을 사용할 수 있습니다 알고있는 것처럼 S로 전달되는 시퀀스의 리턴 길이 eq.iteri (Seq.iteri는 전체 시퀀스를 반복하므로). 귀하의 경우에는

Seq.length mySequence 

:이 대신 변경 가능한 변수에 대해 생각의 더 많은 기능 프로그래밍 방법이 될 것입니다

mySequence |> Seq.iteri (fun i x -> ...) 
let i = Seq.length mySequence 
관련 문제