我来自SML背景,对高阶函数感觉很舒服。但我并没有真正理解列表理解。 在List
上有什么情况下列表理解比高阶函数更适合,反之亦然?列表理解与F中的高阶函数#
我听说列表理解比高阶函数慢,我应该在编写性能关键函数时避免使用它吗?
对于这个例子的缘故,看看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))