【发布时间】:2020-07-19 06:52:03
【问题描述】:
我遇到了这种语法:
[10.; 11.; 12.]
|> List.map (fun a b -> a * b)
List.map在什么情况下有两个参数(fun a b)?
这是 Jupyter Lab 中的输出:
【问题讨论】:
-
很高兴知道被否决的原因
标签: f#
我遇到了这种语法:
[10.; 11.; 12.]
|> List.map (fun a b -> a * b)
List.map在什么情况下有两个参数(fun a b)?
这是 Jupyter Lab 中的输出:
【问题讨论】:
标签: f#
这是一个有趣的例子,因为它看起来很混乱,而且在实践中通常不会出现,所以一开始让我措手不及。
简而言之,您将浮点数列表映射到float -> float 函数列表中。改写成这样更容易看出:
let results =
[10.; 11.; 12.]
|> List.map (fun a -> (fun b -> a * b))
您将float -> float -> float 函数作为映射器传递,它会部分应用于输入列表中的元素。但是第二个参数b 没有被应用,所以映射的输出是一个函数,它接受一个浮点数并将其乘以列表的部分应用元素,整体结果是一个float -> float 函数的列表。
然后您可以将这些函数应用到某个值,如下所示:
results
|> List.map (fun f -> f 2.)
【讨论】: