柯里化(科里化)Currying
2016-07-02 本文已影响104人
傻傻小萝卜
科里化:必须使用在一元函数中,且函数具有两个或者两个以上的变量。
Currying如何进行的呢?不妨来看一个直观的例子,假设有如下函数:f(x, y, z) = x / y +z.要求f(4,2, 1)的值。
首先,用4替换f(x, y, z)中的x,得到新的函数g(y, z) = f(4, y, z) = 4 / y + z
然后,用2替换g(y, z)中的参数y,得到h(z) = g(2, z) = 4/2 + z
最后,用1替换掉h(z)中的z,得到h(1) = g(2, 1) = f(4, 2, 1) = 4/2 + 1 = 3
科里化中例如函数y = x+y的swift函数为:
fun caddTo(adder:Int)->Int->Int{
return{ // 这里return 是返回Int->Int,而在下面的num中存放了第一次输 入的数据
num in
return num + adder
}
}
上面讲到的那个函数f(x, y, z) = x / y +z.要求f(4,2, 1)的值。函数写法应该是这样
函数的调用:
let hanShuX =hanShuXYZ(1)//对Z赋值
let hanShuXY = hanShuX(4)//将对X赋值,
let hanShuXYZD = hanShuXY(2)//对XY赋值
函数这样调用的话,调用写好方法的那个函数中的值是最后赋给参数的,就像上面最早的是赋值的是1,但是它是Z,最后一个赋值的,其他都是按照顺序的