【发布时间】:2018-04-25 11:01:00
【问题描述】:
The Little Schemer (4th edition)第二章的第一个问题要求读者编写函数lat?,如果l是原子列表,(lat? l)返回true。
接着说:
您还不能做到这一点,因为您仍然缺少一些成分。
但是我对递归很熟悉,而且本书前面对atom?的定义已经介绍了and(进一步暗示or的存在),所以我还是试了一下:(repl )
(define lat?
(lambda (l)
(or
(null? l)
(and
(atom? (car l))
(lat? (cdr l))))))
在下一页,本书介绍了cond 运算符来启用lat? 的这种定义:
(define lat?
(lambda (l)
(cond
((null? l) #t)
((atom? (car l)) (lat? (cdr l)))
(else #f))))
这两种实现方式有什么明显区别吗?
【问题讨论】:
-
没有。除了
or的实际存在,非暗示存在;cond表达式有效地定义了它。