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 が空リストにはエラーを起こすからだ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください