庄周梦蝶

生活、程序、未来
   :: 首页 ::  ::  :: 聚合  :: 管理

sicp 4.2.1两题

Posted on 2008-10-31 23:12 dennis 阅读(445) 评论(0)  编辑  收藏 所属分类: 计算机科学与基础

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不能定义成特殊形式,仅在定义成过程的情况下有效,我想像不出此场景。



只有注册用户登录后才能发表评论。


网站导航: