亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3252 | 回復(fù): 2
打印 上一主題 下一主題

關(guān)于SICP3.3.4的agenda [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2009-03-17 18:07 |只看該作者 |倒序?yàn)g覽
書中只說了after-delay和propagate的實(shí)現(xiàn),但是沒有提到其中agenda的實(shí)現(xiàn).
我看了一下置頂,似乎答案里也沒有提到這個(gè)...
但是為了能讓里面的東西跑起來,我自己實(shí)現(xiàn)了一個(gè)agenda,經(jīng)過了簡(jiǎn)單的測(cè)試.
如果以后有人做到這里,可以拿來參考一下
技巧拙劣,還望指教:
(其中propagate的用法略有不同,我增加了一個(gè)表參數(shù)
還擅自增加了一個(gè)"執(zhí)行到設(shè)定的某個(gè)時(shí)間停止"的操作act-to-time,第一個(gè)參數(shù)是時(shí)間(沒有判斷是否會(huì)逆向),第二個(gè)參數(shù)是待處理表)

  1. ;Agenda

  2. (define (get-time pro-element)
  3.   (car pro-element))

  4. (define (get-action pro-element)
  5.   (cdr pro-element))

  6. (define (make-agenda)
  7.   (cons 0 '()))

  8. (define (empty-agenda? agenda)
  9.   (null? (cdr agenda)))

  10. (define (first-agenda-item agenda)
  11.   (cadr agenda))

  12. (define (remove-first-agenda-item! agenda)
  13.   (if (empty-agenda? agenda) (display "Try to delete an empty agenda")
  14.       (set-cdr! agenda (cddr agenda)))
  15.   'done)

  16. (define (set-agenda-time! time agenda)
  17.   (set-car! agenda time))

  18. (define (add-to-agenda! time action agenda)
  19.   (if (or (null? (cdr agenda))
  20.           (> (get-time (cadr agenda)) time)) (let ((new-procedure (cons time action)))
  21.                                                (let ((new-list (cons new-procedure (cdr agenda))))
  22.                                                  (set-cdr! agenda new-list)
  23.                                                  'ok))
  24.       (add-to-agenda! time action (cdr agenda))))

  25. (define (action-first! agenda)
  26.   (if (empty-agenda? agenda) (display "Try to act an empty agenda!")
  27.       (let ((first-element (first-agenda-item agenda)))
  28.         ((get-action first-element))
  29.         (set-agenda-time! (get-time first-element) agenda)
  30.         (remove-first-agenda-item! agenda)
  31.         'ok
  32.         )))

  33. (define (act-to-time! time agenda)
  34.   (if (or (empty-agenda? agenda)
  35.           (< time (get-time (first-agenda-item agenda)))) (begin
  36.                                                            (set-agenda-time! time agenda)
  37.                                                            'done)
  38.       (begin
  39.         (set-agenda-time! (get-time (first-agenda-item agenda)) agenda)
  40.         (action-first! agenda)
  41.         (act-to-time! time agenda))))
  42.       

  43. (define (current-time agenda)
  44.   (car agenda))

  45. (define (propagate agenda)
  46.   (if (empty-agenda? agenda) 'done
  47.       (begin
  48.         (action-first! agenda)
  49.         (propagate agenda))))

  50. (define (reset-agenda! agenda)
  51.   (set-agenda-time! 0 agenda)
  52.   (set-cdr! agenda '())
  53.   'done)

  54. (define the-agenda (make-agenda))

  55. (define (after-delay delay action)
  56.   (add-to-agenda! (+ delay (current-time the-agenda))
  57.                   action
  58.                   the-agenda))
復(fù)制代碼

[ 本帖最后由 PeterGhostWolf 于 2009-3-17 18:12 編輯 ]

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2009-03-17 18:24 |只看該作者
書上有的。

第 195 頁下方,有一節(jié):“待處理表的實(shí)現(xiàn)”

不過自己實(shí)現(xiàn)一個(gè)比從書上抄更好,支持! :wink:

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2009-03-17 18:31 |只看該作者
原帖由 win_hate 于 2009-3-17 18:24 發(fā)表
書上有的。

第 195 頁下方,有一節(jié):“待處理表的實(shí)現(xiàn)”

不過自己實(shí)現(xiàn)一個(gè)比從書上抄更好,支持! :wink:

我頓時(shí)淚奔了....
不過可以看一下自己的實(shí)現(xiàn)和書上的區(qū)別和差距...
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP