F#:是否有一种惯用的方法来替换 for loops seq{} 表达式?

F#: Is there an idiomatic way to replace for loops seq{} expressions?

在 F# 中是否有更惯用的方式来表达这种模式:

seq {
    for item1 in list1 do 
        for item2 in list2 do
            yield f(item1,item2)
}

谢谢!

这种模式非常地道。

通常一种替代方法是使用高阶函数管道,如 Seq.mapSeq.filter,但对于您的特定情况 - 笛卡尔积 - 序列理解方法真的很出色,否则你将无法获得任何接近于那么简单的东西。

最终是判断调用使用哪种样式。我倾向于更喜欢管道方法,后来才意识到序列理解方法要清晰得多。

只要您不需要任何复杂的东西,例如命令式特征或子表达式的扁平化 (yield!),您可以使用稍微不那么冗长的语法:

seq { for item1 in list1 do
      for item2 in list2 -> f(item1, item2) }