zoukankan      html  css  js  c++  java
  • 搞不懂的柯里化

    封装一个count方法,能实现如此调用:count(a)(b)(c)(d)(e)… 并且返回的值为参数连乘的结果,即abcde*…。如count(1)(3)(7) 得到21

    function count(a){
        return function(b){
            return a*b;
        }
    }
    // count(1)(2)
    function count(a){
        return function(b){
            return function(c){
                return a*b*c;
            };
        }
    }
    // count(1)(2)(4)
    // 根据规律改进  ,只能做到count(1)(3)(7)()这一步了,能力达不到~~
    function count(a){
        var cc = function(x){
            if(!arguments.length) return a;
            return count(a*x)
        }
        return cc;
    }
    

    count(1)(3) -- function 3 差一点

    function count(x){
      var fn = function(y){
        return count(x*y);
      }
      fn.toString = function(){
        return x;
      };
        return fn;
    }
    console.log( count(1)(2)(4) )   // function 8
    console.log( (count(1)(2)(4)).toString() );     // 8
    

    不懂

    柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

    function currying(fn) {
        var slice = Array.prototype.slice,
            __args = slice.call(arguments, 1);
        return function() {
            var __inargs = slice.call(arguments);
            return fn.apply(null, __args.concat(__inargs));
        };
    }
    
    var getWife = currying(function() {
        var allWife = [].slice.call(arguments);
        console.log(allWife.join(";"));
    }, "0");
    
    getWife(1, 2, 3, 4, 5)   // 0;1;2;3;4;5
    
  • 相关阅读:
    基础练习 高精度加法
    基础练习 阶乘计算
    基础练习 闰年判断
    基础练习 01字串
    基础练习 字母图形
    基础练习 数列特征
    基础练习 杨辉三角形
    基础练习 特殊的数字
    基础练习 回文数
    Codeforces 417A Elimination
  • 原文地址:https://www.cnblogs.com/lyre/p/6169225.html
Copyright © 2011-2022 走看看