The Little Schemer 知识点整理(二):处理,处理,反复处理……
2018 年 12 月 05 日
准备知识
(atom? a)
: 判断 S-表达式 a
是否为一个原子。
(else ...)
: 总是 true。
(or a b)
: 询问两个问题 a
和 b
,一次问一个。如果 a
的答案为 true,则停止问第二个问题 b
,答案为 true。否则继续询问,答案为 b
的答案(true 或者 false)。
(cond ...)
: 问问题。
(lambda ...)
: 创建一个函数。
(define ...)
: 为函数命名。
Scheme 十诫之第一诫
在表述任意函数时,总是将询问 null?
作为诸问题之首。
自定义函数
(lat? l)
定义:lat?
函数判断列表 l
中的元素是否都是原子。
实现:
(define lat?
(lambda (l)
(cond
((null? l) #t)
((atom? (car l)) (lat? (cdr l)))
(else #f))))
(member? a lat)
定义:member?
判断列表 lat
中是否存在 a
。
实现:
(define member?
(lambda (a lat)
(cond
((null? lat) #f)
(else (or (eq? (car lat) a)
(member? a (cdr lat)))))))
EOF