我们在介绍通过let语句来定义函数时,介绍过可以定义带有几个参数的函数。但是,有趣的是,这只是看上去如此而已,实际上F#的函数永远只接受一个参数,带有几个参数的函数是将几个接受单一参数的函数进行组合后的结果。为什么可以这样,是因为F#是可以将另外一个函数作为函数的返回结果的。
也就是说,可以将其考虑成将带有两个参数的函数用只带有一个参数的函数进行表达。(将带有参数A和B并返回C的函数表达成:将带有参数B并返回C的这个函数FunctionA,作为另一个新函数FunctionB的返回结果进行返回,新函数FunctionB接受参数A)。
这个例子里,针对前述FunctionA和FunctionB两个函数来说,将参数A传给另一个函数,该函数接受参数B,返回参数C,最后将接受A的函数返回,这一系列操作就叫做柯里化。
一般情况下参数的个数很可能在两个以上,根据百度百科的说法,变成如下方式-将带有几个参数的函数,转变成:将第一个参数作为最开始函数的参数,将该函数的执行结果返回,接受第二个参数,将该函数返回,接受第三个参数......,一直到接受最后一个参数,并返回该函数的执行结果。
单靠语言表达可能比较难以理解,所以让我们来看些实例。(确认的时候为了立刻显示函数信息,用解释器的效果比较好)
//定义执行加法运算的函数 |
如上所述,三个以上的参数也可以进行柯里化。另外,就象上例中inc1函数那样,可以使用柯里化简单定义新的函数。如果理解了“以使用第一个参数为起点“来进行柯里化,那么也就可以很好地理解参数的执行顺序和柯里化的过程了。