2016-09-14 4 views
0

я наткнулся на двух следующих определений функций:разница между n_times и цепи

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); 
    } 
} 

Я не могу показаться, чтобы выяснить разницу между ними. Применение модели подстановки предлагает следующее:

для цепи: chain(f, 3) (x) = f(f(f(x))))

для n_times: n_times(f, 3) (x) = f((f(f(x))) (x))

Таким образом, существует более одной переменной в случае n_times.

Любая помощь была бы принята с благодарностью.

Большое спасибо в продвинутом виде.

ответ

3

Вы, должно быть, ошибались где-то в своей замене. С определениями функций вы дали (которые не являются на самом деле стандарт кстати), это

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) 
+0

Я вижу, я должен испортили где-то. Но в любом случае два эквивалента? Спасибо – user3146687

+0

Нет, очевидно, нет, они расширяются до чего-то другого. Также рассмотрите, какой тип 'f' должен иметь в двух выражениях. – Bergi