建议大家看原书,我看原书都觉得很累,每句话都要去琢磨。
现代程序语言提供三种机制:1,基本表达形式:构造简单元素 2,组合的方法:通过简单的元素构造复合元素 3,抽象的方法:抽象复合对象,(对复合对象命名)
简单元素就是 数据以及操作数据的过程,任何程序语言还必须提供对数据和过程的组合和抽象
Lisp中键入表达式,解释器就会计算表达式的值
用表示基本过程的表达式(+,×)和表示数的表达式组合起来形成复合表达式。表示需要将 有关的过程应用于数
(+ 2.7 10)
这叫做组合式,就是括号括起若干表达式,表示一个过程应用。最左边的是运算符,其他的是运算对象。
程序设计语言需要提供通过名字去使用计算对象的方式,将变量和值进行关联。
define是最简单的抽象方法,可以用一个名字去引用一个组合运算的结果。将值与符号关联后需要将来取出,这种存储被称为环境。
组合式求值:1,求值该表达式的所有子表达式 2,将最左子表达式的值(即表示过程的运算符),应用到其他子表达式
第一条描述递归,反复利用可以可以到达求值中的某一点,处理基本表达式的方式:
数的值就是它们所表示的数值
运算符的值就是机器指令序列
其他名字的值就是所关联的对象
小小总结一下:组合式是带括号的,是一种特殊的表达式,它将表达式括起来形成一个表,用来表示一个过程应用。组合式求值就是先求出各个子表达式的值,然后把代表运算的表达式的值应用到其他表达式上,比如(+ 1 2)就是先分别求出+,1,2的值,然后把+对应的机器码应用到1和2上。好累,看了半天才看懂。
(define x 3) 不会被求值,它不是一个组合式,因为它是特殊形式,每个特殊形式都有其自身的求值规则。
复合过程,一种更强大的抽象技术,它可以为复合操作提供名字。而不仅仅是之前的为名字绑定一个对象。
(define square (x) (* x x))