计算机程序的构造和解释笔记 - 前言

目录

  • 目标
  • 努力达到此目标 !!!
  • Lisp
  • 计算过程
  • 程序设计的基本元素
  • 表达式
    • 允许出现组合式嵌套
    • 命名和环境
    • 组合式的求值
    • 树形积累
    • 复合过程
      • 过程定义
      • 过程定义的一般形式是
      • 可以用square作为基本构件去定义其他过程

目标

这本书 制定的目标是, 能对程序设计的风格要素和审美观有一种很好的感觉, 掌握控制大型系统中的复杂性的主要技术, 能够读50页长的程序, 有把握去修改一个程序, 并保持原作者的精神和风格.

努力达到此目标 !!!

Lisp

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

组合式的求值

求值一个组合式要做以下事情

  1. 求值该组合式的各个子表达式.
  2. 将作为最左子表达式的值的那个过程应用于相应的实际参数, 所谓实际参数也就是其他子表达式的值.

树形积累

我们可以采用一棵树的形式表示组合式的求值过程, 其中的每个组合式用一个带分支的结点表示, 由它发出的分支对应于组合式里的运算符和各个运算对象. 终端结点表示的运算符或者数值.

可以设想那些运算对象的值向上穿行, 从终端结点开始, 而后在越来越高的层次中组合起来.

这种计算过程称为树形积累.

复合过程

过程定义

平方的表述 : 求某个东西的平方, 就是用它自身去乘它自身
使用lisp表述 : (define (square x) (* x x))

(define (square x) ( x x))*
定义 平方 某个东西 乘 它 和 它自身

过程定义的一般形式是

(define ( ) )

  • 是一个符号, 过程定义将在环境中关联于这个符号.
  • 是一些名字, 用于表示过程应用时与他们对应的各个实际参数.
  • 是一个表达式

可以用square作为基本构件去定义其他过程

例如 : 求两个数的平方和

(define (sum-of-squares x y))
	(+ (square x) (square y)))

你可能感兴趣的:(计算机程序的构造和解释笔记,计算机程序)