再帰呼び出し(たとえば(1)(2)(3)(4))と複数の引数2,3,4))?このよう再帰呼び出しと複数の引数の合計関数
:
sum(5, 5) // 10
sum(5)(5) // 10
ありがとうございました。
再帰呼び出し(たとえば(1)(2)(3)(4))と複数の引数2,3,4))?このよう再帰呼び出しと複数の引数の合計関数
:
sum(5, 5) // 10
sum(5)(5) // 10
ありがとうございました。
次の引数の関数を返すことができ、toString
メソッドを実装できます。関数型プログラミングで
function sum() {
var add = function (a, b) { return a + b; },
value = Array.prototype.reduce.call(arguments, add, 0);
function f() {
value = Array.prototype.reduce.call(arguments, add, value);
return f;
};
f.toString = function() { return value; };
return f;
}
console.log(sum(5, 5));
console.log(sum(5)(5));
console.log(sum(3, 4, 5)(6, 7));
私は修正された、それはスマートな解決策です –
、何を求めていることはをカリー化の概念に基づいています。 Curryingは、不定数のパラメータを部分的に適用する関数を可能にします。これは、いったんカレー化されると、引き数に引数と操作を格納し、次の引き数でフィードするための別の関数を返します。
ハスケルのような言語では、これはすべての関数の自然な振る舞いですが、JSではありません。しかしJSは関数の一種であり、関数を渡したり返すことができるので、カリングはまだかなり達成可能です。
OKマルチ引数関数を総称してカリングする方法を見てみましょう。
function sum(n,m,o,p){ // uncurried standard function
return n + m + o + p;
}
function curry(fn){ // takes an uncurried function and returns a curried function
return function(...a){
return a.length >= fn.length ? fn(...a)
: curry(fn.bind(fn,...a));
};
}
var csum = curry(sum); // now csum is the curried version of sum
console.log(csum(1,2,3,4)); // <- 10
console.log(csum(1)(2,3,4)); // <- 10
console.log(csum(1,2)(3,4)); // <- 10
console.log(csum(1,2,3)(4)); // <- 10
console.log(csum(1)(2)(3,4)); // <- 10
console.log(csum(1)(2)(3)(4)); // <- 10
はい、それは可能です。 – Teemu
これまでに何を試しましたか? –