書いてみたっていうか、内側のリストが空でないのが保証されているのなら、map (と car )を使うほうが素直に感じる。まあ、本(「Scheme手習い」)では順を追って説明していくのだろうけど。
(define first (lambda (l) (map car 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)
もし、内側のリストに空リストが混じっているとうまく動かないはずだ。
gosh> (first '((a b) () (c d) (e f))) *** ERROR: pair required, but got () Stack Trace: _______________________________________
やっぱり。これは car が空リストにはエラーを起こすからだ。