閱讀890 返回首頁    go 阿裏雲 go 技術社區[雲棲]


sicp 4.2.1兩題

4.25,如果在scheme解釋器的應用序求值下,unless定義為一個過程,那麼
(* (factorial (- n 1))
將無窮遞歸下去。如果在正則序時,由於延時求值,僅當需要計算時才求值此表達式,不會造成無窮遞歸,在1的時候正常結束遞歸。

4.26,在上一節求值器的基礎上定義unless的語法形式還是很簡單的,
首先在analyze過程添加分析unless:
 ((unless? exp) (analyze (unless->if exp)))

然後定義unless?和unless->if

(define (unless? exp)
  (tagged
-list? exp 'unless))
(define (unless->if exp)
  (make
-if (cadr exp) (cadddr exp) (caddr exp)))


最後一問,構造一個unless與高階函數聯合使用的場景,在此場景下,unless不能定義成特殊形式,僅在定義成過程的情況下有效,我想像不出此場景。

文章轉自莊周夢蝶  ,原文發布時間 2008-10-31

最後更新:2017-05-18 11:02:00

  上一篇:go  《Spring 5 官方文檔》4. 資源(二)
  下一篇:go  Eric S. Raymond 五部曲