构造过程抽象
Is it possible that software is not like anything else,that it is meant to be discarded: that the whole point is to see it as a soap bubble? -Alan J.Perlis
计算过程抽象(Building Abstractions with Procedures)
Procedure is some kind of magic.When we are designing a procedure,we just ignore the details, and imagine that we have got all the element we need.
Intro
Process是控制一些抽象的数据的过程。Program就是用来控制Process演化的规则。这里SICP讲的很抽象,接着往下看便是。
计算的过程就像变魔术,一个process看不见摸不着,不是由真实的物质组成的但却是真真切切存在的东西。我们写的程序就像是完全由符号组成的精灵的咒语。不过学编程要比学咒语简单多了hhhh。不过从现在开始我们可以想象计算机就是some kind of sorcery ,只要咒语正确,事情就能正确的完成。
回到SICP这门课程要讨论的话题:软件工程,又或者说,怎样构造一个复杂的系统。成为大牛软件工程师要有组织程序的能力,从一个高级的视角观察系统的能力, 知道怎么样构造在意外的情况下也不会导致严重问题的计算机程序(鲁棒性好),并且知道问题发生时如何debug。
Programming in Lisp
1. Why Lisp?
Lisp语言的特性使其成为学习程序构造和数据结构的利器,最重要的是Lisp是描述性语言,他所描述的procedures本身可以作为Lisp的data进行表示和处理,Lisp这种描述计算过程的能力让他成为了优秀的计算机语言。并且Lisp下编程与以往所学过的C family programming language相当不同,用Lisp编程将会相当有意思。
The Elements of Programming
一个好的编程语言不单单意味着能写出让计算机do something的程序,语言更是我们组织思想的框架,因此我们描述一个语言的时候要尤其注意这个语言是如何将简单的想法进行有机的结合而构造出复杂的机制的。所有的优秀的语言都至少完成一下三个机制:
- primitive expressions:基本的表达式,代表了整个语言最简单的实体
- means of combination,通过什么方法组合简单元素能形成复杂的元素
- 抽象方法: 元素怎样作为一个单元被命名和控制
本章我们只讨论简单的数值型数据而把精力集中在建立procedures的规则上。之后我们再考虑复杂的数据类型。
Expressions in Lisp
所有的表达式都是前缀表达式(波兰表达式),即
( p r o c e d u r e (procedure (procedure v a l 1 val_1 val1 v a l 2 … val_2 \dots val2… v a l n ) val_n) val