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

2018 年 12 月 05 日

准备知识

(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 中的元素是否都是原子。

实现:

(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

Twinkle 的博客
瞎折腾