如何在JavaScript中处理任意数量的参数时使用curry?

如何在JavaScript中处理任意数量的参数时使用curry?,javascript,currying,Javascript,Currying,功能multDiv将执行以下操作: MULTIV432->4 x 3/2=6 multDiv211632->2 x 1/1 x 6/3 x 2=8 参数从左到右使用交替的乘法和除法求值。我不会给出代码-它绝对可行。问题是您必须在每次函数调用时返回一个函数。所以不能只返回一个数字,这个数字也是一个函数 我要说的是,在函数本身添加一个tap方法,在执行一系列multDiv操作后返回当前值。我不会给出代码-这是完全可行的。问题是您必须在每次函数调用时返回一个函数。所以不能只返回一个数字,这个数字也是一

功能multDiv将执行以下操作:

MULTIV432->4 x 3/2=6

multDiv211632->2 x 1/1 x 6/3 x 2=8


参数从左到右使用交替的乘法和除法求值。

我不会给出代码-它绝对可行。问题是您必须在每次函数调用时返回一个函数。所以不能只返回一个数字,这个数字也是一个函数


我要说的是,在函数本身添加一个tap方法,在执行一系列multDiv操作后返回当前值。

我不会给出代码-这是完全可行的。问题是您必须在每次函数调用时返回一个函数。所以不能只返回一个数字,这个数字也是一个函数


我会说在函数本身上添加一个tap方法,在执行一系列multDiv操作后返回当前值。

一种不使用curry的方法;应该能够使用currying方法返回相同的结果

function multDiv(n) {
  var r = 0
  , n = Array.isArray(n) ? n : Array.prototype.slice.call(arguments);
  n.forEach(function(_, i, array) {
    // multiply
    if (i % 2 === 0) {
      if (array[i + 1]) {
        if (r === 0) {
          r = array[i] * array[i + 1];
        } else {
          r *= array[i + 1]
        }
      }
    } else {
      // divide
      if (array[i + 1]) {
        r /= array[i + 1]
      }
    }
  });
  return r
}

// pass array or parameters; e.g., `[4,3,2]` or `4,3,2`
multDiv(4, 3, 2); // 6
multDiv([2, 1, 1, 6, 3, 2]); // 8
变量输入=document.querySelectorAllinput, 输出=document.querySelectorAlloutput; 对于var指数=0;指数<输出长度;索引++{ var args=JSON.parseinputs[index].value; 输出[index].innerHTML=multDivargs } 函数multDivn{ var r=0, n=Array.isArrayn?n:Array.prototype.slice.callarguments; n、 forEachfunction,i,数组{ 如果i%2==0{ if数组[i+1]{ 如果r==0{ r=数组[i]*数组[i+1]; }否则{ r*=数组[i+1] } } }否则{ if数组[i+1]{ r/=数组[i+1] } } }; 返回r } 结果: 结果:
不使用咖喱的方法;应该能够使用currying方法返回相同的结果

function multDiv(n) {
  var r = 0
  , n = Array.isArray(n) ? n : Array.prototype.slice.call(arguments);
  n.forEach(function(_, i, array) {
    // multiply
    if (i % 2 === 0) {
      if (array[i + 1]) {
        if (r === 0) {
          r = array[i] * array[i + 1];
        } else {
          r *= array[i + 1]
        }
      }
    } else {
      // divide
      if (array[i + 1]) {
        r /= array[i + 1]
      }
    }
  });
  return r
}

// pass array or parameters; e.g., `[4,3,2]` or `4,3,2`
multDiv(4, 3, 2); // 6
multDiv([2, 1, 1, 6, 3, 2]); // 8
变量输入=document.querySelectorAllinput, 输出=document.querySelectorAlloutput; 对于var指数=0;指数<输出长度;索引++{ var args=JSON.parseinputs[index].value; 输出[index].innerHTML=multDivargs } 函数multDivn{ var r=0, n=Array.isArrayn?n:Array.prototype.slice.callarguments; n、 forEachfunction,i,数组{ 如果i%2==0{ if数组[i+1]{ 如果r==0{ r=数组[i]*数组[i+1]; }否则{ r*=数组[i+1] } } }否则{ if数组[i+1]{ r/=数组[i+1] } } }; 返回r } 结果: 结果:
你能发布一些你写的代码吗?这是不可能的。它怎么知道multDiv432应该是一个数字,multDiv211是一个可以在返回数字之前接受632的函数?您应该能够使用resultmultDiv432==6和resultmultDiv211632==8这样的东西来完成。您可以发布一些您编写的代码吗?这是不可能的。它怎么知道multDiv432应该是一个数字,multDiv211是一个可以在返回数字之前接受632的函数?您应该能够使用resultmultDiv432==6和resultmultDiv211632==8这样的东西来完成它,