【发布时间】:2013-11-12 07:17:36
【问题描述】:
小计划者在page 165 上给出以下内容,仍然是函数length0。但这是如何工作的?看起来 length lambda 正在传递给 mk-length lambda,它使用 length lambdalength lambda /em> 本身作为参数传递。因此,当评估底部的 (length (cdr l)) 时,length 只是 length lambda 本身。但是 length lambda 需要两个参数:length 和 l。那么(length (cdr l)) 有什么意义呢?
((lambda (mk-length)
(mk-length mk-length))
(lambda (length)
(lambda (l)
(cond
((null? l) 0)
(else (add1
(length (cdr l))))))))
【问题讨论】:
-
正确;它没有。它将
(lambda (l) ...)返回到add1,从而导致错误;这就是为什么它是length_0:它只适用于空列表。而且length这个名字也是错误的,它真的应该叫mk-length——事实上,在那个框架的右半边。