【Programming Languages And Lambda calculi】现实语言模型 5.1 ISWIM表达式

第二部分 现实语言模型

第五章 ISWIM

Church 发展了Lambda 演算作为机械计算的互补,成为学习数学的一种方法。在20世纪60年代 Landin 证明了 Church 的Lambda演算并不能作为大多数编程语言的适合模型。举例来说,Lambda表达式
在这里插入图片描述

约化为 1 的编码,尽管大部分语言会对 (sub1 λy.y) 颇有言辞。问题并不止于 sub1和 λy.y 的编码,对整个表达式进行 β 约化后,(sub1 λy.y) 参数将会完全被忽略。

这种 名称调用 的特点是否可取,仍有待商榷。无论如何,许多语言都不支持 名称调用。作为替代,它们支持 值调用,其在应用函数之前,必须对函数的参数进行完全求值。

在此章节中,我们将会介绍 Landin 的 ISWIM , 它将更接近 值调用 语言的核心,例如 Scheme 和 ML。ISWIM的基本语法与 Lambda演算 相同,自由变量和子条件的概念相同。但不同于 Lambda演算,更接近实际编程语言的是,ISWIM附带了一组基本常量和基本操作。最根本的区别在于,ISWIM提出的值调用约化规则。

5.1 ISWIM 表达式

ISWIM的语法对 Lambda演算 进行了扩展。
在这里插入图片描述

其中,一个表达式 ( o n   M 1   . . .   M m ) (o^n\ M_1\ ...\ M_m) (on M1 ... Mm) 只在 n = m 的情况下成立。我们可以用许多方式定义集合 b 和 on ;语言的高级属性将保持不变。具体来说,E我们将使用下述定义 b 和 on
在这里插入图片描述

1┐表示整数1。 + 表示加法运算符。↑ 表示取幂,等等。并且,我们定义一个十分有用的 if0 宏:
在这里插入图片描述

FV 和 _[_ ← _] 关系以以中明显的方式扩展到新语法:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_35714301/article/details/113925618