2017-07-06 6 views
8

私は、現時点でのF#を学んでいますが、私はこのような理解に苦労している:私はyield!オペレータはまさに私が読んだにもかかわらず、何を把握することはできませんよF#yield! (yieldbang)オペレータ

let allPrimes = 
let rec allPrimes' n = 
    seq { 
     if isPrime n then 
      yield n 
     yield! allPrimes' (n + 1) } 
allPrimes' 2 

を他の簡単な例では、yield!は内部シーケンスを返します。

答えて

9

yield bang演算子は、呼び出されたシーケンス式によって生成されたサブシーケンスを最終シーケンスにマージします。または、より単純な言葉では、返されたシーケンスを「平坦化」して、最終シーケンスにサブシーケンスの要素を含めることができます。ご例えば

:降伏ビッグバンオペレータがなければ、あなたは、各{が新しい配列を意味

{ prime1 prime2 prime3 ... } 

を取得し、降伏強打演算子で

{ prime1 { prime2 { prime3 .... }}} 

のようなものになるだろう。サイドノード:最初の例の実際の結果には、さらに多くのシーケンスが含まれます。n is primeの場合にのみプライムが返されるため、シーケンスを含むシーケンスが返されるためです。