「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
ことを示唆しています。しかしこれは、空の可能性がある list が に渡され、null チェックインが実行される前に行われることを意味します。(add1 (depth* (car l))
(depth* (cdr l))
(lambda (x1 ... xn) b ...)
l
car
cdr
(null? l) 1)