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

时间:2015-04-13 23:50:08

标签: f#

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

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

谢谢!

2 个答案:

答案 0 :(得分:6)

这种模式和它一样惯用。

通常另一种方法是使用高阶函数的管道,如Seq.mapSeq.filter,但对于您的特定情况 - 笛卡尔积 - 序列理解方法真的很闪耀,否则你就不会接近那么简单。

大概是判断使用哪种风格的判断。我倾向于选择管道方法,后来才意识到序列理解方法有多清楚。

答案 1 :(得分:1)

只要您不需要任何复杂的内容,例如命令式功能或扁平表达式(yield!),您就可以使用稍微冗长的语法:

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