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.map
或 Seq.filter
,但对于您的特定情况 - 笛卡尔积 -
序列理解方法真的很出色,否则你将无法获得任何接近于那么简单的东西。
最终是判断调用使用哪种样式。我倾向于更喜欢管道方法,后来才意识到序列理解方法要清晰得多。
只要您不需要任何复杂的东西,例如命令式特征或子表达式的扁平化 (yield!
),您可以使用稍微不那么冗长的语法:
seq { for item1 in list1 do
for item2 in list2 -> f(item1, item2) }
在 F# 中是否有更惯用的方式来表达这种模式:
seq {
for item1 in list1 do
for item2 in list2 do
yield f(item1,item2)
}
谢谢!
这种模式非常地道。
通常一种替代方法是使用高阶函数管道,如 Seq.map
或 Seq.filter
,但对于您的特定情况 - 笛卡尔积 -
序列理解方法真的很出色,否则你将无法获得任何接近于那么简单的东西。
最终是判断调用使用哪种样式。我倾向于更喜欢管道方法,后来才意识到序列理解方法要清晰得多。
只要您不需要任何复杂的东西,例如命令式特征或子表达式的扁平化 (yield!
),您可以使用稍微不那么冗长的语法:
seq { for item1 in list1 do
for item2 in list2 -> f(item1, item2) }