n_times和链之间的差异

时间:2016-09-14 11:11:08

标签: functional-programming

我遇到了以下两个函数定义:

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的情况下有多个变量。

非常感谢任何帮助。

非常感谢先进。

1 个答案:

答案 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)