首页 > 试题广场 >

柯里化

[编程题]柯里化
  • 热度指数:39545 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
已知 fn 为一个预定义函数,实现函数 curryIt,调用之后满足如下条件:
1、返回一个函数 a,a 的 length 属性值为 1(即显式声明 a 接收一个参数)
2、调用 a 之后,返回一个函数 b, b 的 length 属性值为 1
3、调用 b 之后,返回一个函数 c, c 的 length 属性值为 1
4、调用 c 之后,返回的结果与调用 fn 的返回值一致
5、fn 的参数依次为函数 a, b, c 的调用参数
示例1

输入

var fn = function (a, b, c) {return a + b + c}; curryIt(fn)(1)(2)(3);

输出

6
function curryIt(fn) {
  return a => b => c => fn.call(this, a, b, c)
}
发表于 2023-06-29 10:22:25 回复(0)
function curryIt(fn) {
    returnfunction a(a1){
        returnfunction b(b1){
            returnfunction c(c1){
                returnfn.call(this,a1,b1,c1)
            }
        }
    }
}
发表于 2023-05-10 10:20:11 回复(0)
function curryIt(fn) {
    return a = function(a1){
        return b = function(b1){
            return c = function(c1){
                return fn.call(this,a1,b1,c1)
            }
        }
    }
}
发表于 2023-04-10 20:10:51 回复(0)
function curryIt(fn) {
 return function(a){
     
       return function(b){
       
         return function(c){
         
           return a+b+c
         }
       }

     }

}
发表于 2023-03-22 11:17:11 回复(0)
function curryIt(fn) {
    return t => q => c => fn(t,q,c);
}

发表于 2022-12-06 17:41:35 回复(0)
简洁明了
function curryIt(fn) {
     return function(str1){
         return function(str2){
            return function(str3){
              return fn(str1,str2,str3)
           }
         }
      }
}
发表于 2022-11-15 21:51:33 回复(0)
function curryIt(fn) {
    return function(a){
        return function(b){
            return function(c){
                return fn.call(this,a,b,c)
            }
        }
    }
}
发表于 2022-10-25 13:09:43 回复(0)
测试了好多次终于过了 原来a 的 length 属性值为 1指的是传入一个参数
emmmmm 浪费了好长时间 
function curryIt(fn) {
    let arr=[]
    let n=fn.length
    return function fn01(a){
        arr=[...arr,a]
        if(arr.length<n){
            return fn01
        }else{
            return fn(...arr)
        }
    }
}
发表于 2022-08-30 19:55:08 回复(0)
function curryIt(fn) {
    return (a) => {
        return (b) => {
            return (c) => {
                return fn(a,b,c);
            }
        }
    }
}

发表于 2022-08-19 17:32:23 回复(0)
function curryIt(fn) {
	const result = a => b => c => fn.call(this,a,b,c)
    return result
}

发表于 2022-08-10 11:24:30 回复(0)
function curryIt(fn) {
    return function (a) {
        return function (b) {
            return function (c) {
                return fn(a, b, c)
            }
        }
    }
}

发表于 2022-08-01 21:54:30 回复(0)
curryIt = fn => a => b => c => fn(a,b,c)
发表于 2022-07-14 13:25:20 回复(0)
function curryIt(fn) {
    
    return function a(i1){
        return function b(i2){
            return function c(i3){
                return fn(i1,i2,i3);
            }
        }
    }
}

发表于 2022-02-15 17:27:15 回复(0)
function curryIt(fn) {
    return (a) => {
        return (b) => {
            return (c) => a + b + c; 
        }
    }
}

// 简写
function curryIt(fn) {
    return (a) => (b) => (c) => a + b + c;
    }
}

发表于 2022-01-13 14:49:29 回复(0)
function curryIt(fn) {
    let args = []
    return function(arg){
        args.push(arg)
        if(args.length>=fn.length){
            return fn.apply(null,args)
        }else{
            return arguments.callee
        }
    }
}

发表于 2021-12-05 16:44:48 回复(0)
// recursion 递归 call,接收非数组 apply,接收数组
// args通过push, length变大
function curryIt(fn){
	let args = []
	return function recursion(arg){
        args.push(arg)
		if (args.length < fn.length) {
			return function (arg2){
				return recursion.call(null,arg2);
			}
		}
		return fn.apply(null,args)
	}
}

function curryIt(fn) {
	let args = []
	function a(arg){ // 1、 a 的 length 属性值为 1(即显式声明 a 接收一个参数)
		args.push(arg)
		return b; // 2、调用 a 之后,返回一个函数 b, b 的 length 属性值为 1 
	}
	function b(arg){
		args.push(arg)
		return c; // 3、调用 b 之后,返回一个函数 c, c 的 length 属性值为 1
	}
	function c(arg){
		args.push(arg); 
		return fn(...args); // 4、调用 c 之后,返回的结果与调用 fn 的返回值一致
		// 5、fn 的参数依次为函数 a, b, c 的调用参数 ...args
	}
	return a; // 1、 返回一个函数 a;
}

发表于 2021-11-16 10:52:02 回复(1)
ES6写法,记录下
function curryIt(fn) {
    const myCurry = (restArgNum, argList)=>
    restArgNum === 0? fn(...argList): x => myCurry(restArgNum-1, [...argList, x]);
    return myCurry(fn.length, []);
}

发表于 2021-11-15 20:08:16 回复(0)