在“The Seasoned Schemer”的第 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))
and(depth* (cdr l))
被评估并传递给由(lambda (x1 ... xn) b ...)
. 但这意味着l
可能为空的 list 将在 null 签入完成之前car
传递给它们。cdr
(null? l) 1)