在F#中是否有更惯用的表达方式:
seq {
for item1 in list1 do
for item2 in list2 do
yield f(item1,item2)
}
谢谢!
答案 0 :(得分:6)
这种模式和它一样惯用。
通常另一种方法是使用高阶函数的管道,如Seq.map
或Seq.filter
,但对于您的特定情况 - 笛卡尔积 -
序列理解方法真的很闪耀,否则你就不会接近那么简单。
大概是判断使用哪种风格的判断。我倾向于选择管道方法,后来才意识到序列理解方法有多清楚。
答案 1 :(得分:1)
只要您不需要任何复杂的内容,例如命令式功能或扁平表达式(yield!
),您就可以使用稍微冗长的语法:
seq { for item1 in list1 do
for item2 in list2 -> f(item1, item2) }