F# yield ! (yieldbang) 运算符

标签 f# yield

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

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

我无法弄清楚 yield!即使我读过其他更简单的例子,运算符也确实如此,似乎 yield!返回一个内部序列。

最佳答案

yield bang 运算符将调用序列表达式产生的子序列合并到最终序列中。或者更简单地说:它“扁平化”返回的序列以在最终序列中包含子序列的元素。

对于您的示例:如果没有 yield bang 运算符,您会得到类似的结果

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

使用 yield bang 运算符,您会得到
{ prime1 prime2 prime3 ... }

{表示一个新的序列。侧节点:我的第一个示例的实际结果甚至会包含更多序列,因为它会返回仅包含序列的序列,因为只有在 n is prime 时才返回素数.

关于F# yield ! (yieldbang) 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44947719/

相关文章:

f# - 摆脱 F# 中的 "pyramid of doom"

scala 关键字优先级

c# - 从事件处理程序中使用 yield

python - Python "yield"的行为

f# - 为什么这个示例中存在类型推断错误

sql-server - F# FSharp.Data.SqlClient 无法识别来自存储过程的多个返回表

python - 结合递归和yield进行树遍历

Python,将Popen的流重定向到python函数

arrays - 访问 csv 文件中的条目以进行计算 F#

f# - 解析括号表达式