firstをmapを使って書いてみた
書いてみたっていうか、内側のリストが空でないのが保証されているのなら、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 が空リストにはエラーを起こすからだ。
