摘要:学习冴羽的博客理解偏函数
什么是偏函数
局部应用是指固定一个函数的一些参数,然后产生另一个更小元的函数
偏函数与柯里化的区别:
柯里化是将一个多参数函数转换成多个单参数函数,也就是将一个n元函数转换成n个一元函数
1 | fn(1,2,3,...,n) => fnCurry(1)(2)...(n) |
局部应用则是固定一个函数的一个或者多(x)个参数,也就是将一个n元函数转换成一个n-x元函数
1 | fn(1,2,3...n) => fnPartial(1,2,...,x)(x+1,x+2,...,n) |
如果当x为1时
1 | fn(1,2,3...n) => fnPartial(1)(2,...,n) |
再对后面的函数使用局部应用,x同样为1
1 | fnPartial(1)(2,...,n) => fnPartial(1)(2)(3,...,n) |
继续下去
1 | fnPartial(1)(2)(3,...,n) => fnPartial(1)(2)(3)...(n) |
可以发现:偏函数固定一个参数应用到最后就跟柯里化一个样了
第一版
1 | function partial(fn) { |
这个跟柯里化的第一版是一样的
第二版
希望可以使用占位符,因为局部应用转换后的函数接受的是剩下的所有参数,所以转换后的函数只需要按接受参数的顺序先将占位符依次替换,剩下的参数添加到后面即可
1 | function partial(fn) { |