【发布时间】:2019-01-14 18:24:24
【问题描述】:
在 F# 中,如果我采用带有两个参数的函数,例如 mod (%):
13 % 10
// val it : int = 3
与
相同(%) 13 10
// val it : int = 3
有什么办法可以用管道符号来写,柯里化 13?
显然,“双参数函数”实际上是一个返回中间函数的单参数函数。管道也可以
10 |> (%) 13
// val it : int = 3
但是,我需要相反的方法,即管道第一个参数 13,部分应用第二个参数 10,但不是第一个。
语言中是否有任何东西可以帮助做到这一点,而无需每次都创建额外的 lambda,即避免以下情况?
13 |> (fun x -> x % 10)
【问题讨论】:
-
对,但是有什么办法可以颠倒部分应用的顺序,而不需要每次都创建额外的函数,即不用 let mod10,不用 (fun x -> x % 10)
-
这可能只是一个错字(嗯,不止一个地方),但我仍然想指出
(%) 10 13 = 10。所以参数的顺序不会在前缀和中缀形式之间改变。
标签: f# functional-programming currying partial-application