oakland / tecblog

My tech blogs
4 stars 0 forks source link

sicp #176

Open oakland opened 5 years ago

oakland commented 5 years ago

https://web.mit.edu/alexmv/6.037/,官网

b站有资源,评论里有原版视频地址 https://www.bilibili.com/video/av8515129

https://hackernoon.com/my-sicp-structure-and-interpretation-of-computer-programs-challenge-c6a12dff4f11

https://xuanji.appspot.com/isicp/index.html http://sarabander.github.io/sicp/html/index.xhtml

https://www.lvguowei.me/categories/sicp/

DrRacket 的安装与 SICP 的配置

学习SICP(《计算机程序的构造和解释》)的一些准备工作

Deathking-Learning-sicp

https://github.com/strint/sicpAns

oakland commented 1 year ago

关于抽象和解析

我们构建系统的时候,是从最基本的元素开始构建,比如 chapter1 中,我们最开始以计算机提供的 + 和 * 这些简单运算符构建了 squre,然后是 sum-of-square,然后是 f。我们可以将这个过程展示如下:

      f
--------------
sum-of-square
--------------
   square
--------------
     + *

从下向上抽象程度逐渐增加。

与之相反,我们求值(eval)的时候,会把结果一层一层向下降级,也就是一次一次 apply 的过程,最终降级到我们定义的最原始的 + * 这些运算符,来得到我们的结果。

所以构建和解析的过程是两个完全相反的过程,构建是一步一步抽象,逐渐升级,而解析是一次一次具体,逐渐降级的过程。

例如,我们 (f 5) 的第一步是降级到 sum-of-square,变成 (sum-of-square (+ 5 1) (* 5 2)),然后 sum-of-square 这一层中把原始的 + * 直接计算得到结果,不能计算的继续又降级到 square,变成 (+ (square 6) (square 10),然后 operand 不能直接计算,所以继续降级,变成 (+ (* 6 6) (* 10 10)),然后就都变成了原始的符号,直接计算就可以得到结果。

所以说我们构建系统的时候是逐步抽象的过程,但是我们构建解释器的时候是要把所有的抽象消灭掉的过程。