SICP Lec5b:计算对象 (数位电路模拟器 - part 2)

以下是对于 MIT SICP 课程影片(lec 5b)的心得记录,part 2 为 [31:00~ final]

Part 1部分说到,把系统当中的物件与真实世界的物件做对应,是一种思考上的经济,当然除了物件相对应之外,真实世界按时发生的状态变化,也需要被组织成系统中的时间,这些状态的变化,就是需要用到 "赋值",且用一个Agenda来表示优先顺序

Agenda

Agendas(make-agenda) #产生agenda(current-time agenda) #给出当前时间(time)(empty-agenda? agenda) #目前agenda是否为空(true/false)(add-to-agenda! time action) #加新的action至agenda当中(first-item agenda) #给出第一个action(remove-frist-item) #删除第一个action

Agenda data structure

Agenda为一个list,由很多pair组成
http://img2.58codes.com/2024/201175169Y8CmsZZ8X.png
由上可知,当call Agenda function中的任何function

会先依据time(10)找到segment增添新的action:在segment中的queue中增加action增加agenda:找到segment位置,修改那个segment

Queue

(make-queue) #创造新的queue(insert-queue! queue item) #插入新项目进入queue(delete-queue! queue) #删除queue(front-queue queue) #查看queue第一个元素(empty-queue? queue) #是否为空

queue data structure

http://img2.58codes.com/2024/20117516KiyWyvrnB8.png
多加了一个rear尾部的指针,因为如果想从尾部增加item,就不用从head开始找起
执行 delete-queue实际上就是把要删除的item指针指向它的下一个item,就这么简单
执行 insert-queue就是先创造一个 内涵新item的pair,把更改指针指向它

set-car, set-cdr

由上述Agenda, queue可知,一切更改state的源头就是去更改那些指针,因此最基础改变state的源头就是两个function set-car set-cdr

如何实现这两个funciton,请看 Identity? of objects (SICP lec5b)

最后会发现cons, car, cdr, pair这些 data structure,并不需要一个data structure的容器容纳,只需要 Lambda


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章