Land of Lispを読んでみる – その3

引き続き「Land of Lisp」を読んでみた。なんとか最後までたどり着いた。

第14章:関数型プログラミング

手続き型コードと関数型と高階プログラミングを
同じ課題でコードを書き分けてみる。
ゲームはなし。
このあと、数章にわたって、大きなゲームプログラムを作って
段階的に拡張していく(らしい)。

第15章:ダイスウォーズ

関数型プログラミングで、戦略ゲームを作る。
DiceWars」「KDice」というFlashゲームが元ネタらしい。英語版のWikipediaには、 Taro Ito’s _Dice Wars_が作ったと書いてあるぞ!
小さな盤サイズからはじめて、かなり強いCPU対戦モードも作る。
コードは217行。

クロージャ、メモ化、末尾呼び出し最適化というテクニックを利用して、高速化する。

ただ、手元のPCが不安定になってしまい、Common Lispを動かしていたWSLをアンインストール。残念ながら、ここから、あまり写経をしていない。

第16章:マクロ

噂に名高いLispのマクロ。
いや、これは面白い。
JavaScript版CommonLispでやってみた。

第17章:ドメイン特化言語

マクロの実例として、ドメイン特化言語を扱う。
SVGフォーマットやHTMLを生成する簡易記法。
さらに、第5章で作ったテキストアドベンチャーゲームを拡張。
前のコードに、30行ほど追加するだけ。

第18章:遅延プログラム

ふたたび、ダイスウォーズ。
盤サイズが大きくなると、CPUモードで先読みできなくなるため
遅延プログラムで探索ツリーを刈り込む。
前のバージョンに、180行ほど追加。

第19章:ダイスウォーズに、グラフィカルなWebインターフェースを追加

さらに、200行ほど追加。

第20章:ダイスウォーズの仕上げ

さらに、160行を追加して完成!

エピローグ:Lispマンガ

というわけで、なんとか最後まで読んだけど、写経は中途半端なってしまった。
公式サイトのサンプルコードを見ると、600行ほどで、ここまで作り込めるのはすごいな。

それに、今までプログラミング言語の入門書を読んできても、ここまで写経させるものはなかったし、写経しているうちの理解度の高さはスゴイ。もっと写経したくなる。南無阿弥陀仏。

ちゃんと、独特のふざけたスタイルではあるけれど、基本的な事項を説明しながら、高度なプログラムを実現してみせる本は、ほかにはない。

Lispの本を、もう何冊か読んでみたいし、RubyやJavaScriptのメタプログラミングについても調べてみたくなりました。