profile photo

一起学习魔法吧(番外篇1)

2020-04-22 15:36:03

任何非常先进的技术,初看都与魔法无异。

currying

currying(柯里化)将函数转化成单参函数,即将所有函数固定为接受一个参数,返回一个值的形式。给予 λ 演算一个理论模型。


而柯里化究竟是什么呢?我们可以这么理解,例如现在我们有一个二元函数f(x,y) = x + y 那么在代码里可以这么书写:

int add(int a, int b){
    return a + b;
}

甚至没学过计算机的人都能看懂它的含义,取两个数 a,b 在进行相加运算后返回结果。但我们应当注意的是,这个函数传进去的只能是两个参数,否则机器将无法工作。更重要的是这个函数返回的是一个数值。


而柯里化的方式是什么呢?柯里化要把这个函数改造为单参函数。逻辑上如下图所示 image 该图上面是正常的 add,下面是柯里化的 add。


我们相当于构建了两个“机器”每个“机器”只做有限的工作,剩下的工作交给下一个“机器”,这样我们可以把复杂的“机器”拆分成一系列的小型“机器”。


柯里化给我们理清了一个思路,类似于用皮亚诺公理解释自然数,我们可以用这种简单的函数(过程)模型来构建出强大的系统。但是这个理论在实际应用上貌似并不多,至少在我所触及的范围内几乎没有用过。

注:由于笔者的水平有限,文章中可能存在疏漏。