【问题标题】:Understanding lambda calculus through translation into Python?通过翻译成 Python 来理解 lambda 演算?
【发布时间】:2019-10-07 18:30:13
【问题描述】:

我试图了解 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)

【问题讨论】:

  • 我投票结束这个问题,因为它要求对代码翻译进行视觉审查;这超出了 Stack Overflow 的范围,甚至可能超出代码审查小组的范围。
  • 欢迎来到 StackOverflow。请按照您创建此帐户时的建议阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确说明问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您指定的问题。 StackOverflow 不是设计、编码、研究或教程资源。
  • 不正确。 (λz.z) (λy.y y) (λx.x a) 的结果是 a a

标签: python lambda-calculus


【解决方案1】:

首先我们将翻译每个 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    相关资源
    最近更新 更多