SICP--第四章 元语言抽象

元语言抽象就是建立新的语言。对于某个程序设计语言的求值器(或者 解释器)也是一个过程,在应用于这个语言的一个表达式时,它能执行求值这个表达式所要求的动作

求值器决定了一个程序设计语言中各种表达式的意义,而它本身也不过就是另一个程序

元循环求值器

用与被求值的语言同样的语言写出的求值器被称为元循环

SICP--第四章 元语言抽象_第1张图片

求值器的实现依赖于一些定义了被求值表达式的语法形式的过程

SICP--第四章 元语言抽象_第2张图片

求值器的内核

求职过程可以描述为两个过程 eval 和 apply 之间的相互作用

eval 

eval 的参数是一个表达式和一个环境,eval 对表达式进行分类,依次引导自己的求值工作

基本表达式:

  • 对于自求值表达式,例如各种数,eval 直接返回这个表达式本身
  • eval 必须在环境中查找变量,找出它们的值

特殊形式:

  • 对于加引号的表达式,eval 返回被引的表达式
  • 对于变量的防御值(或者定义),就需要递归地调用 eval 去计算出需要关联于这个变量的新值。而后需要修改环境,以改变(或者建立)相应变量的约束
  • 一个 if 表达式要求对其中各部分的特输处理方式,在谓词为真时求值其推论部分,否则就求值其替代部分
  • 一个 lambda 必须被转换成一个可以应用的过程,方式就是将这个 lambda 表达式所描述的参数表和体与相应的求值环境包装起来
  • 一个 begin 表达式要求求值其中的一系列表达式,按照它们出现的顺序
  • 分情况分析(cond)将被变换为一组嵌套的 if 表达式,而后求值

组合式:

  • 对于一个过程应用,eval 必须递归地求值组合式的运算符部分和运算对象部分。而后将这样得到的过程和参数送给 apply,由它去处理实际的过程应用

这是 eval 的定义:

SICP--第四章 元语言抽象_第3张图片

apply

apply 有两个参数,一个是过程,一个是该过程应该去应用的实际参数的表。apply 将

SICP--第四章 元语言抽象_第4张图片

SICP--第四章 元语言抽象_第5张图片

过程参数

SICP--第四章 元语言抽象_第6张图片

条件

SICP--第四章 元语言抽象_第7张图片

序列

SICP--第四章 元语言抽象_第8张图片

赋值与定义

SICP--第四章 元语言抽象_第9张图片

SICP--第四章 元语言抽象_第10张图片

表达式的表示

SICP--第四章 元语言抽象_第11张图片

SICP--第四章 元语言抽象_第12张图片

SICP--第四章 元语言抽象_第13张图片

SICP--第四章 元语言抽象_第14张图片

SICP--第四章 元语言抽象_第15张图片

派生表达式

SICP--第四章 元语言抽象_第16张图片

SICP--第四章 元语言抽象_第17张图片

我们这样选出来的,采用语法变换的方式实现的表达式(如 cond 表达式)称为派生表达式,let 表达式也被称为派生表达式

求值器数据结构

除了需要定义表达式的外部语法形式之外,求值器的实现还必须定义好其内部实际操作的数据结构,作为程序执行的一部分。

谓词检测

SICP--第四章 元语言抽象_第18张图片

过程的表示

SICP--第四章 元语言抽象_第19张图片

对环境的操作

一个环境就是一个框架的序列,每个框架都是一个约束的表格,其中的约束关联起一些变量和与之对应的值。下面是针对环境的操作:

SICP--第四章 元语言抽象_第20张图片

SICP--第四章 元语言抽象_第21张图片

SICP--第四章 元语言抽象_第22张图片

SICP--第四章 元语言抽象_第23张图片

SICP--第四章 元语言抽象_第24张图片

作为程序运行这个求值器

将求值器描述为程序的一个优点是我们可以运行这个程序,这样就给了我们一个能够在 Lisp 本身如何完成表达式求值的工作模型。这一模型可以作为一个工作框架,使人能够去试验各种求值规则。

SICP--第四章 元语言抽象_第25张图片

SICP--第四章 元语言抽象_第26张图片

SICP--第四章 元语言抽象_第27张图片

SICP--第四章 元语言抽象_第28张图片

SICP--第四章 元语言抽象_第29张图片

将数据作为程序

内部定义

SICP--第四章 元语言抽象_第30张图片

SICP--第四章 元语言抽象_第31张图片

SICP--第四章 元语言抽象_第32张图片

将语法分析与执行分离

SICP--第四章 元语言抽象_第33张图片

SICP--第四章 元语言抽象_第34张图片

SICP--第四章 元语言抽象_第35张图片

SICP--第四章 元语言抽象_第36张图片

SICP--第四章 元语言抽象_第37张图片

SICP--第四章 元语言抽象_第38张图片

SICP--第四章 元语言抽象_第39张图片

你可能感兴趣的:(SICP,sicp)