以下是对于 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组成
由上可知,当call Agenda function中的任何function
Queue
(make-queue) #创造新的queue(insert-queue! queue item) #插入新项目进入queue(delete-queue! queue) #删除queue(front-queue queue) #查看queue第一个元素(empty-queue? queue) #是否为空
queue data structure
多加了一个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