関数 first は空のリストまたはリストのリスト(ただし内側のリストは空ではない)を引数に取り、内側の書くリストの最初のS式からなる新しいリストを返す。
これは答えを見ないで書いてみよう。
(define first (lambda (l) (cond ((null? l) (quote ())) (else (cons (car (car l)) (first (cdr l)))))))
さて、うまくいくかな?
gosh> (first '((a b) (c d) (e f))) (a c e) gosh> (first '()) () gosh> (first '((five plums) (four) (eleven green oranges))) (five four eleven)
うまくいった。
第3の戒律
リストを作らんとせしときは、最初の要素になるものを記述し、しかる後にそれを自然なる再帰に cons すべし。
[追記]
よく読み返したら、関数名が first じゃなくて firsts だった。ま、内容は変わらないからいいか。