• 函数科里化


    函数科里化是高阶函数,关键在于函数科里化的意义或者用途。
    函数科里化有至少两种实现方式,我写两种。一种是将参数拆分开就能求值。

      function curry(fn, currArgs) { // 这里的fn就是sum方法
                return function () {
                    let args = [].slice.call(arguments);
                    // 首次调用时未提供参数currArgs,因此不用进行拼接执行
                    if (currArgs !== undefined) {
                        args = args.concat(currArgs); // 这里的currArgs是上次递归传递进来的,也就是上次递归的args
                    }
                    // 递归调用
                    if (args.length < fn.length) {
                        return curry(fn, args);
                    }
                    return fn.apply(null, args); // 这里调用了apply方法,将收集起来的args参数全都传入fn中
                }
            }
    

      

    这一种是利用递归思想实现。递归的条件是fn的参数个数和args的参数比较,一直参数相等计算结果。

    另一种

           function curry2(fn){
                var args = [];
                return function(){
                    if(arguments.length ===0){
                        return fn.apply(this,args)
                    }else {
                        [].push.apply(args, arguments)
                        return arguments.callee
                    }
                }
            }

    这是利用闭包同时返回函数本身,然后一直没有参数时候计算结果。

    函数科里化是函数式编程的一种。是为了解决复杂性产生的一种技术。实际上因为使用了递归在性能上它是不如原来函数的。但是它的好处就是提供了便利性。

    但是应用场景是什么呢?

    后一种的应用场景可以加入有一个输入面板,如果没有输入了就可以计算了,起到延迟计算的效果;而前一种暂时没有找到。

    我站在山顶看风景!下面是我的家乡!
  • 相关阅读:
    acdream.18.KIDx's Triangle(数学推导)
    upc.2219: A^X mod P(打表 && 超越快速幂(in some ways))
    山东省第四届acm.Rescue The Princess(数学推导)
    BC.5200.Trees(dp)
    BC.36.Gunner(hash)
    hdu.5195.DZY Loves Topological Sorting(topo排序 && 贪心)
    数组倒置算法扩展
    C# 传值和传引用 ( ref out in )
    C# 输出文件夹下的所有文件
    控制反转(自译)
  • 原文地址:https://www.cnblogs.com/zhensg123/p/14613949.html
Copyright © 2020-2023  润新知