《The Little Schemer》知识点整理(二):处理,处理,反复处理……

准备知识

(atom? a) : 判断 S-表达式 a 是否为一个原子。
(else ...) : 总是 true。
(or a b) : 询问两个问题 ab,一次问一个。如果 a 的答案为 true,则停止问第二个问题 b,答案为 true。否则继续询问,答案为 b 的答案(true 或者 false)。

(cond ...) : 问问题。
(lambda ...) : 创建一个函数。
(define ...) : 为函数命名。

Scheme 十诫之第一诫

在表述任意函数时,总是将询问 null? 作为诸问题之首。

自定义函数

(lat? l)

定义:lat? 函数判断列表 l 中的元素是否都是原子。

实现:

1
2
3
4
5
6
(define lat?
(lambda (l)
(cond
((null? l) #t)
((atom? (car l)) (lat? (cdr l)))
(else #f))))

(member? a lat)

定义:member? 判断列表 lat 中是否存在 a

实现:

1
2
3
4
5
6
(define member?
(lambda (a lat)
(cond
((null? lat) #f)
(else (or (eq? (car lat) a)
(member? a (cdr lat)))))))

– EOF –