通过翻译成 Python 来理解 lambda 演算?
Understanding lambda calculus through translation into Python?
我正在尝试了解 lambda 演算的工作原理以及如何简化或扩展不同的语句。
鉴于示例语句 (λz.z) (λy.y y) (λx.x a)
我是否正确翻译和简化了该语句?
这是我的解决方案:
# (λz.z) (λy.y y) (λx.x a)
# F G H
# statement translates to -> F( G( H(x) ) )
f = lambda z: z
g = lambda y: (y, y)
h = lambda x: (x, 'a')
print(f(g(h('x')))) # -> (('x', 'a'), ('x', 'a'))
# so simplified statement = lambda x: (xa)(xa)
首先我们将翻译每个 lambda -
(λz.z)
变为 lambda z: z
(λy.y y)
变为 lambda y: y(y)
(λx.x a)
变为 lambda x: x(a)
接下来我们将对整个表达式求值。 ===
突出显示每一步发生的替换 -
# (λz.z) (λy.y y) (λx.x a)
(lambda z: z) (lambda y: y(y)) (lambda x: x(a))
================ /
___________/ /
/ /
(lambda z: z) _________/
= /
_____/ /
/ /
(lambda y: y(y)) (lambda x: x(a))
================
________________/
/
(lambda y: y(y))
= =
______/ \______
/ \
(lambda x: x(a))((lambda x: x(a)))
================
_______________/
/
(lambda x: x(a))
= \
_____/ \
/ \
(lambda x: x(a))(a)
=
_______/
/
(lambda x: x(a))
= /
_______/ /
/ _______/
/ /
a(a)
我正在尝试了解 lambda 演算的工作原理以及如何简化或扩展不同的语句。
鉴于示例语句 (λz.z) (λy.y y) (λx.x a)
我是否正确翻译和简化了该语句?
这是我的解决方案:
# (λz.z) (λy.y y) (λx.x a)
# F G H
# statement translates to -> F( G( H(x) ) )
f = lambda z: z
g = lambda y: (y, y)
h = lambda x: (x, 'a')
print(f(g(h('x')))) # -> (('x', 'a'), ('x', 'a'))
# so simplified statement = lambda x: (xa)(xa)
首先我们将翻译每个 lambda -
(λz.z)
变为lambda z: z
(λy.y y)
变为lambda y: y(y)
(λx.x a)
变为lambda x: x(a)
接下来我们将对整个表达式求值。 ===
突出显示每一步发生的替换 -
# (λz.z) (λy.y y) (λx.x a)
(lambda z: z) (lambda y: y(y)) (lambda x: x(a))
================ /
___________/ /
/ /
(lambda z: z) _________/
= /
_____/ /
/ /
(lambda y: y(y)) (lambda x: x(a))
================
________________/
/
(lambda y: y(y))
= =
______/ \______
/ \
(lambda x: x(a))((lambda x: x(a)))
================
_______________/
/
(lambda x: x(a))
= \
_____/ \
/ \
(lambda x: x(a))(a)
=
_______/
/
(lambda x: x(a))
= /
_______/ /
/ _______/
/ /
a(a)