https://www.slideshare.net/ScottWlaschin/fp-patterns-ndc-london2014说
坏消息:组合模式仅适用于具有一个参数的函数!
好消息!每个函数都是一个参数函数!
通过部分应用,我们可以将具有两个参数的函数转换为具有一个参数的函数。例如
let add x y = x + y
let add x = (fun y -> x + y)
let add1 = (+) 1
let three = add1 2
我们如何将不带参数的函数转换为单参数函数?
答案 0 :(得分:7)
没有参数就没有函数,并且多参数函数也没有进行转换。引言说:“每个函数 都是一个参数函数”。总是只有一个参数,不多也不少。
您可能认为无参数的函数可能是一个采用unit
类型的单个参数的函数:
let f () = ...
unit
类型只有一个值,()
(也称为“单位”),因此它不包含任何信息,但从技术上讲仍然是一个值。您可能会认为它是空元组。
二参数函数实际上是一个具有一个参数的函数,并返回另一个具有另一个参数的函数。请记住,函数是一流的,这意味着它们是可以从函数返回并绑定到变量名称的值。因此,这两种形式是等效的,前者只是后者的语法糖:
let f a b = ...
let f = fun a -> fun b -> ...
三参数函数是一个返回函数的函数,该函数返回一个函数,依此类推。这称为“咖喱”。并且,对于咖喱函数,部分函数应用只是普通函数应用。函数应用程序只是碰巧返回一个函数,而不是其他值。