ANSI Common Lispの演習、2、3章に続いて、4章をこなしました。
セクション4
問題4-5は、著者本人のページで、「本に掲載されているコードそのままで、題意を満たしている」となっているので省略です。
2014/01/28
2014/01/09
Lisp再入門
「ANSI Common Lisp(ピアソン・エデュケーション)」と、「On Lisp(オーム社)」を読書中です。いずれもポール・グラハム著です。
学生のころに「プログラムの構造と解釈(Structure and Interpretation of Computer Programs、SICP)」はひと通り読んで、Lisp/Scheme系のひと通りの教養(閉包とか継続とか末尾再帰)は知っているつもりでしたが、Lispの良さ、真髄はそのあたりだけではなくマクロにあるようなので、そこを習得してみようと思ったのでした。
とりあえず、Lisp系は久しぶりなのと基本的にずっとScheme派(Schemeの方がシンプルで良いと思っていたのでした)だったので、リハビリと基礎づくりを兼ねて、ANSI Common Lispの演習をやってみることにしました。
セクション2から真面目に始めてみました。
セクション3は、3-7の最短経路、最長経路を求める問題が面白かったです。
実装は、著者のものと少し違うものにしてみました。
キューの最後にappendするのが遅そうだったのでループ版も書いてみましたが、あまり綺麗になりませんでした。無理やりループ化するのではなくFIFO(リストの先頭と末尾を押さえる)をこしらえて、それで後にエンキューしてやるのが良さそうですね。
3-6の「リストの先頭要素をcdrで、後続要素をcarにする」という問題も面白いですね。最初は題意が取れませんでしたが、(a b c)を(((nil .c) . b) . a)と表現すればよいのだと理解。
登録:
投稿 (Atom)