如何以“普通”英语阅读以下表达

问题描述

我正在阅读《从第一原理开始的Haskell编程》一书,尽管作者试图详细解释如何简化表达式,但我仍然难以理解如何在提供的示例中阅读某些表达式。

我们假设以下表达式:

(λx.x)然后,如果我正确理解,可以理解为:“一个lambda函数,它接受参数x并返回(基本上将.转换为“ returns”),值x

现在假设我们具有以下表达式:

(λxy.xy),我们如何用普通英语阅读该表达?为了使其更加复杂,作者然后将(λxy.xy)扩展到(λxy.xy)(λz.a) 1。这些za在以上表达式中如何显示?我希望,如果我可以将表达式正确地转换为简单的英语,就能理解za的来源。

解决方法

在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(可能是一个外部定义的常量)。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...