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)))
(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