F# 屈服!(yieldbang)操作员

F# 屈服!(yieldbang)操作员,f#,yield,F#,Yield,目前我正在学习F#,但我很难理解这一点: let allPrimes = let rec allPrimes' n = seq { if isPrime n then yield n yield! allPrimes' (n + 1) } allPrimes' 2 我不知道会产生什么结果操作符确实如此,尽管我读过其他更简单的例子,它似乎是屈服返回一个内部序列。yield bang操作符将被调用序列表达式生成的子序列合并到最终序列

目前我正在学习F#,但我很难理解这一点:

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

我不知道
会产生什么结果操作符确实如此,尽管我读过其他更简单的例子,它似乎是
屈服
返回一个内部序列。

yield bang操作符将被调用序列表达式生成的子序列合并到最终序列中。或者更简单地说:它“展平”返回的序列,以便在最终序列中包含子序列的元素

举个例子:如果没有收益率爆炸算子,你会得到

{ prime1 { prime2 { prime3 .... }}}
使用收益率爆炸算子,你可以得到

{ prime1 prime2 prime3 ... }
其中每个
{
表示一个新序列。Side节点:我的第一个示例的实际结果甚至会包含更多序列,因为它将返回仅包含序列的序列,因为只有
n是prime
时才返回prime