我遇到了以下两个函数定义:
function n_times(f, n) {
if (n === 1) {return f;}
else {
return function(x) {
return f((n_times(f, n - 1)) (x));
}
}
}
function chain(f, n) {
if(n === 1) {
return f;
} else {
return (chain(f, n - 1)) (f);
}
}
我似乎无法弄清楚两者之间的区别。应用替代模型表明如下:
for chain:chain(f, 3) (x) = f(f(f(x))))
表示n_times:n_times(f, 3) (x) = f((f(f(x))) (x))
因此在n_times的情况下有多个变量。
非常感谢任何帮助。
非常感谢先进。
答案 0 :(得分:3)
你必须在替换中出错。使用您给出的函数定义(实际上不是标准的btw),它是
n_times(f, 3) (x)
≡ function(x) { return f(n_times(f, 2)(x)) } (x)
≡ f(n_times(f, 2)(x))
≡ f(function(x) { return f(n_times(f, 1)(x)) } (x))
≡ f(f(n_times(f, 1)(x)))
≡ f(f(f(x)))
和
chain(f, 3) (x)
≡ chain(f, 2) (f) (x)
≡ chain(f, 1) (f) (f) (x)
≡ f (f) (f) (x)