我正在学习F#,但我很难理解这一点:
let allPrimes =
let rec allPrimes' n =
seq {
if isPrime n then
yield n
yield! allPrimes' (n + 1) }
allPrimes' 2
Run Code Online (Sandbox Code Playgroud)
yield!即使我读过其他更简单的例子,我也无法弄清楚算子究竟做了什么,它似乎yield!返回了一个内部序列.
Mat*_*ten 15
yield bang运算符将被调用序列表达式产生的子序列合并到最终序列中.或者用更简单的词语:它"平坦化"返回的序列,以在最终序列中包含子序列的元素.
对于你的例子:如果没有yield bang运算符,你会得到类似的东西
{ prime1 { prime2 { prime3 .... }}}
Run Code Online (Sandbox Code Playgroud)
你得到的收益率操作员
{ prime1 prime2 prime3 ... }
Run Code Online (Sandbox Code Playgroud)
其中每个{表示一个新序列.侧节点:我的第一个例子的实际结果甚至会包含更多序列,因为它会返回仅包含序列的序列,因为仅在返回时才返回素数n is prime.