返回介绍

solution / 2600-2699 / 2632.Curry / README

发布于 2024-06-17 01:03:01 字数 2580 浏览 0 评论 0 收藏 0

2632. 柯里化

English Version

题目描述

请你编写一个函数,它接收一个其他的函数,并返回该函数的 柯里化 后的形式。

柯里化 函数的定义是接受与原函数相同数量或更少数量的参数,并返回另一个 柯里化 后的函数或与原函数相同的值。

实际上,当你调用原函数,如 sum(1,2,3) 时,它将调用 柯里化 函数的某个形式,如 csum(1)(2)(3)csum(1)(2,3)csum(1,2)(3),或 csum(1,2,3) 。所有调用 柯里化 函数的方法都应该返回与原始函数相同的值。

 

示例 1:

输入:
fn = function sum(a, b, c) { return a + b + c; }
inputs = [[1],[2],[3]]
输出:6
解释:
执行的代码是:
const curriedSum = curry(fn);
curriedSum(1)(2)(3) === 6;
curriedSum(1)(2)(3) 应该返回像原函数 sum(1, 2, 3) 一样的值。

示例 2:

输入:
fn = function sum(a, b, c) { return a + b + c; }
inputs = [[1,2],[3]]]
输出:6
解释:
curriedSum(1, 2)(3) 应该返回像原函数 sum(1, 2, 3) 一样的值。

示例 3:

输入:
fn = function sum(a, b, c) { return a + b + c; }
inputs = [[],[],[1,2,3]]
输出:6
解释:
你应该能够以任何方式传递参数,包括一次性传递所有参数或完全不传递参数。
curriedSum()()(1, 2, 3) 应该返回像原函数 sum(1, 2, 3) 一样的值。

示例 4:

输入:
fn = function life() { return 42; }
inputs = [[]]
输出:42
解释:
柯里化一个没有接收参数,没做有效操作的函数。
curriedLife() === 42

 

提示:

  • 1 <= inputs.length <= 1000
  • 0 <= inputs[i][j] <= 105
  • 0 <= fn.length <= 1000
  • inputs.flat().length == fn.length
  • 函数参数需要被显式定义
  • 如果 fn.length > 0 则最后一个数组 inputs 不为空
  • 如果 fn.length === 0 则 inputs.length === 1 

解法

方法一

function curry(fn: Function): Function {
  return function curried(...args) {
    if (args.length >= fn.length) {
      return fn(...args);
    }
    return (...nextArgs) => curried(...args, ...nextArgs);
  };
}

/**
 * function sum(a, b) { return a + b; }
 * const csum = curry(sum);
 * csum(1)(2) // 3
 */

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文