【发布时间】:2011-06-07 09:43:58
【问题描述】:
我来自 SML 背景,对高阶函数感觉很舒服。但我真的不明白列表理解的想法。 是否存在列表推导比List 上的高阶函数更适合的情况,反之亦然?
我听说列表解析比高阶函数慢,在编写性能关键函数时应该避免使用它吗?
为了这个例子,看看Projecting a list of lists efficiently in F# @cfern 的答案包含两个版本,分别使用列表理解和高阶函数:
let rec cartesian = function
| [] -> [[]]
| L::Ls -> [for C in cartesian Ls do yield! [for x in L do yield x::C]]
和:
let rec cartesian2 = function
| [] -> [[]]
| L::Ls -> cartesian2 Ls |> List.collect (fun C -> L |> List.map (fun x->x::C))
【问题讨论】:
标签: list f# list-comprehension