Итак, у меня есть лямбда-выражение: (λ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