私は最近 JS の学習を始めましたが、関数型言語の領域に飛び込むのはこれが初めてです。
npm モジュールで「トランポリン」の演習を行っていたfunctional-javascript-workshop
ところ、自分のソリューションと公式のソリューションの間に興味深い違いがありました。どちらも完全に正常に動作しますが、実際の違いが正確に何であるかについては途方に暮れています。私は自分のソリューションをかなりよく理解していますが、他のソリューションも機能する理由を正確には理解していません。
私の解決策
function repeat(op, num) {
var _repeat = function() {
if (num <= 0) return;
op();
return repeat(op, --num);
};
return _repeat;
}
function trampoline(f) {
while (f instanceof Function) {
f = f();
}
return f;
}
module.exports = function(op, num) {
return trampoline(repeat(op, num));
};
公式ソリューション
function repeat(operation, num) {
return function() {
if (num <= 0) return
operation()
return repeat(operation, --num)
}
}
function trampoline(fn) {
while(fn && typeof fn === 'function') {
fn = fn()
}
}
module.exports = function(operation, num) {
trampoline(function() {
return repeat(operation, num)
})
}
具体的には、最後の部分に興味があります-公式のソリューションは、単に渡すのではなく、匿名関数を作成するのはなぜrepeat
ですか?