Почему (( (λf.λx.f(f(f(x)))) (λg.λy.g(g(y))) ) (λz.z + 1)) (0) оценивается как 8?Python

Программы на Python
Ответить
Anonymous
 Почему (( (λf.λx.f(f(f(x)))) (λg.λy.g(g(y))) ) (λz.z + 1)) (0) оценивается как 8?

Сообщение Anonymous »

Итак, у меня есть лямбда-выражение: (λf.λx.f(f(f(x)))) (λg.λy.g(g(y)))(λz.z + 1)(0), и я пытаюсь вычислить его вручную. Я думаю об этом так: (λf.λx.f(f(f(x)))) в основном представляет собой выражение f(f(f(x))). Тогда аналогично (λg.λy.g(g(y))) представляет выражение g(g(y)). Затем вместо f передается g(g(y)). Итак, мы получаем g(g(g(g(g(g(y)))))). Или g составил сам себя 6 раз. Затем мы передаем z+1 вместо g, а затем подставляем 0 в это окончательное выражение и получаем 6.

Код: Выделить всё

>>>(((lambda f: lambda x: f(f(f(x))))(lambda g: lambda y: g(g(y))))(lambda z: z+1))(0)
8
Проблема в том, что когда я проверяю этот ответ с помощью встроенных в Python инструментов лямбда-исчисления, я получаю ответ 8.
Очевидно, что я неправильно оцениваю. Я имею в виду, что композиции 2 g умножаются на композиции 3 f, чтобы получить 6. Но очевидно, что я должен думать об этом как о композициях 2 ^ 3, но я не понимаю, почему.

Подробнее здесь: https://stackoverflow.com/questions/678 ... luate-to-8
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»