如何解决如何以“普通”英语阅读以下表达
我正在阅读《从第一原理开始的Haskell编程》一书,尽管作者试图详细解释如何简化表达式,但我仍然难以理解如何在提供的示例中阅读某些表达式。
我们假设以下表达式:
(λx.x)
然后,如果我正确理解,可以理解为:“一个lambda函数,它接受参数x
并返回(基本上将.
转换为“ returns”),值x
。
现在假设我们具有以下表达式:
(λxy.xy)
,我们如何用普通英语阅读该表达?为了使其更加复杂,作者然后将(λxy.xy)
扩展到(λxy.xy)(λz.a) 1
。这些z
和a
在以上表达式中如何显示?我希望,如果我可以将表达式正确地转换为简单的英语,就能理解z
和a
的来源。
解决方法
在lambda演算中,彼此相邻的值表示将第一个值作为函数调用,而将第二个值作为参数调用。 (λxy.xy)
是(λx.λy.xy)
的简写,表示函数需要一个参数x然后是参数y,并使用参数y调用x。 (如果您想知道为什么会有一个函数返回一个函数,那是由于currying造成的)。要弄清楚(λxy.xy)(λz.a) 1
的含义,我们必须逐步进行:
- 撤消简写:
(λx. λy. xy) (λz. a) 1
- 应用第一个功能(
λx
):(λy. (λz. a) y) 1
- 应用第二个功能(
λy
):(λz. a) 1
- 应用第三个功能(
λz
):a
因此,我们最终得到了a
(可能是一个外部定义的常量)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。