Land of Lispを読んでみる – その2
前回引き続き、がんばって 「Land of Lisp」を読んでいる。
コードが複雑になってきたので、普段使っているテキストエディタのVS Codeに、
カッコを色分けするエクステンション「Bracket Pair Colorizer 2」を導入。
第9章:いろいろなデータ型
配列、ハッシュ、ジェネリック、構造体
Javaのオーバーロードのような機能もあるのね。
作ったゲームは、RPGの戦闘シーンのような「オーク・バトル!」
ここで書いたコードは、約270行。
ただし、いくつかのモンスターの入力を省略。
これで、第2部のコア機能の説明が終了!
第10章:Loopマクロ
ここから第3部。Lispの周辺機能の解説。
まずは、Loopマクロの変態っぷりを味わう。
作例として、進化シミュレーションをLispで実装。
約200行。
これは、A・K・デュードニーの「コンピュータレクリエーション」に載っていた
「Simulated evolution: wherein bugs learn to hunt bacteria」をLispで実装したものだとか。
日本語版は、別冊サイエンス「コンピュータレクリエーションIV」の
「進化のシミュレーション:虫がバクテリアを食べるようになるまで」。
第11章:formatコマンド
機能豊富なformatコマンドの説明。
サンプルゲームは、クラシックなロボット対戦ゲーム。
50行ほどのコードだけど、Loopとformatがてんこ盛りなので
公式サイトからダウンロードしてみた。
http://landoflisp.com/source.html
第12章:ストリーム
標準入力、ファイル操作、ネットワークなど。どれも、ストリームで扱うことができる。
作例として、2つのclispコンソールを用意して、ネットワークを通じてテキストを送る。
Windows10でも、WSLのターミナルを2つ立ち上げて実行できた。
第13章:Webサーバーをつくる
ストリームで、標準入力やファイル・ネットワークが操作できるようになったので、簡単なWebサーバーを作る。そのために、例外処理についても取り上げる。
書いたコードは、100行くらい。
リクエストヘッダーとリクエストボディを解析して、動的なWebページを返す。
コードはちゃんと動いた。だけど、レスポンスはボディだけでヘッダーがない。そのせいか、ブラウザがちゃんとWebページを表示してくれない。Firefoxは、HTMLをテキストとして表示するし、Chromeは”正しいWebページではない”と言ってくる。結局、もうひとつWSLコンソールを立ち上げて、Curlコマンドで動作確認。
第13.5章:閑話休題
息抜きなのか!?なぞのマンガが登場。
Haskellをdisっているようにみえるが、はたして…
第3部、完。
というわけで、12日ほどで284ページ/475ページ。
ざっと60%をクリア。
Common Lispも、軽量スクリプト言語みたいに使えるんだな、ってことがわかってきた。
続く…