【发布时间】:2013-11-24 01:55:42
【问题描述】:
在“经验丰富的计划者”的第 66 页上,它说(let ...) 是以下的缩写:
(let ((x1 a1) ... (xn an)) b ...) = ((lambda (x1 ... xn) b ...) a1 ... an)
例如在第 70 页上使用:
(define depth*
(lambda (l)
(let ((a (add1 (depth* (car l))))
(d (depth* (cdr l))))
(cond
((null? l) 1)
((atom? (car l)) d)
(else (cond
((> d a) d)
(else a)))))))
但上面对lambda 的定义表明(add1 (depth* (car l)) 和(depth* (cdr l)) 被评估并传递给(lambda (x1 ... xn) b ...) 表示的lambda。但这意味着l 可能为空的列表将在(null? l) 1) 中的空检查完成之前传递给car 和cdr。
【问题讨论】: