【问题标题】:List.map with two function parameters, in F#List.map 带有两个函数参数,在 F# 中
【发布时间】:2020-07-19 06:52:03
【问题描述】:

我遇到了这种语法:

[10.; 11.; 12.]
|> List.map (fun a b -> a * b)

List.map在什么情况下有两个参数(fun a b)?

这是 Jupyter Lab 中的输出:

【问题讨论】:

  • 很高兴知道被否决的原因

标签: f#


【解决方案1】:

这是一个有趣的例子,因为它看起来很混乱,而且在实践中通常不会出现,所以一开始让我措手不及。

简而言之,您将浮点数列表映射到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.)

【讨论】:

    猜你喜欢
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2016-01-24
    • 2013-01-28
    • 1970-01-01
    相关资源
    最近更新 更多