这本书 制定的目标是, 能对程序设计的风格要素和审美观有一种很好的感觉, 掌握控制大型系统中的复杂性的主要技术, 能够读50页长的程序, 有把握去修改一个程序, 并保持原作者的精神和风格.
Lisp语言 : 只有不多几种构造符合表达式的方式, 几乎没有语法结构. 支持更多的能用于以模块的方式分解程序的大规模策略.
计算过程是存在于计算机里的一类抽象事物, 在其演化过程中, 这些过程会操作一些被称为数据的抽象事物. 人们创建出一些称为程序的规则模式, 以指导这类过程的进行.
编程语言使我们能够在其中组织自己有关计算过程的思想, 为此提供了三种机制 :
可以用表示基本过程的表达形式, 将表示数的表达式组合起来, 形成复合表达式, 以表示求要把有关过程应用于这些数
例如 :
(+ 137 349)
486
(- 1000 334)
666
其构成方式就是用一对括号括起一些表达式, 形成一个表, 在表里最左的元素称为运算符, 其他元素都称为运算对象. 整个表达式的范围由括号界定.
将运算符放在所有运算对象左边, 这种形式称为前缀表示.
它完全适用于可能带有任意个实参的过程.
例如 :
(+ 21 35 12 7)
75
例如 :
(+ ( 3 5) (- 10 6))*
19
我们将名字标识符称为变量, 它的值就是它所对应的那个对象.
在Scheme里, 给事物命名通过define
的方式完成.
(define size 2)
(define circumference ( 2 pi radius))*
解释器将值2与名字size相关联. 关联之后, 就可以通过名字去引用值.
size
2
求值一个组合式要做以下事情
我们可以采用一棵树的形式表示组合式的求值过程, 其中的每个组合式用一个带分支的结点表示, 由它发出的分支对应于组合式里的运算符和各个运算对象. 终端结点表示的运算符或者数值.
可以设想那些运算对象的值向上穿行, 从终端结点开始, 而后在越来越高的层次中组合起来.
这种计算过程称为树形积累.
平方的表述 : 求某个东西的平方, 就是用它自身去乘它自身
使用lisp表述 : (define (square x) (* x x))
(define (square x) ( x x))*
定义 平方 某个东西 乘 它 和 它自身
(define (
是一个符号, 过程定义将在环境中关联于这个符号.
是一些名字, 用于表示过程应用时与他们对应的各个实际参数.
是一个表达式例如 : 求两个数的平方和
(define (sum-of-squares x y))
(+ (square x) (square y)))