以下是對於 MIT SICP 課程影片(lec 5b)的心得記錄,part 2 為 [31:00~ final]
Part 1部分說到,把系統當中的物件與真實世界的物件做對應,是一種思考上的經濟,當然除了物件相對應之外,真實世界按時發生的狀態變化,也需要被組織成系統中的時間,這些狀態的變化,就是需要用到 "賦值",且用一個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為一個list,由很多pair組成
由上可知,當call Agenda function中的任何function
(make-queue) #創造新的queue
(insert-queue! queue item) #插入新項目進入queue
(delete-queue! queue) #刪除queue
(front-queue queue) #查看queue第一個元素
(empty-queue? queue) #是否為空
多加了一個rear尾部的指針,因為如果想從尾部增加item,就不用從head開始找起
執行 delete-queue
實際上就是把要刪除的item指針指向它的下一個item,就這麼簡單
執行 insert-queue
就是先創造一個 內涵新item的pair,把更改指針指向它
由上述Agenda, queue可知,一切更改state的源頭就是去更改那些指針,因此最基礎改變state的源頭就是兩個function set-car
set-cdr
。
如何實現這兩個funciton,請看 Identity? of objects (SICP lec5b)
最後會發現cons, car, cdr, pair這些 data structure,並不需要一個data structure的容器容納,只需要 Lambda