孤独にそっくり

開いている窓の前で立ち止まるな

Land of Lisp 5章~7章まで読んだ

http://www.flickr.com/photos/12516383@N07/8518769676

photo by whileimautomaton

こんにちは。皆さんはゴールデンウィークを如何お過ごしでしょうか。

僕は、特に予定もないので読書したり、映画見たりして過ごしています。先週『Land of Lisp』を読み始めて、いま7章まで読みました。正確には、先週の金曜日には7章まで読んでいたのですが、最後らへんでうまく実行できなくてドツボにはまっています。なぜか実行してもREPLが止まって何も起こらないんです。一旦諦めて先に進もうかなという感じです。

 

と思ったのですが、これを書きながらとりあえず「Land of Lisp 7章」でググったらLand of Lisp 7章メモ - koropicot's blogさんのところにソースが置いてあったので、それを貼り付けたら動きました。普通に打ち込み間違いじゃんけ、ちくせう…。(このブログが7章以降更新していないのは飽きちゃったのかな)

とはいえ、Lisp 脳に洗脳させられる狂気の秘本! Land Of Lisp を読んだ | Futurismoを眺めていたらLand of Lispのソースはhttp://landoflisp.com/source.html にあることがわかったので、動かなかったらコピペします。

 

さて、5章からは、いよいよゲーム作りが始まりました。5章で作るゲームはテキストゲームで、プレイヤーが以下の行動を取ることができるものです。

  • 周囲を見渡す
  • 別の場所へ移動する
  • オブジェクトを拾う
  • 拾ったオブジェクトで何かをする

このゲームでは、場所をノード、通り道をエッジとして定義します。以上を実装しながら各トピックについて解説しています。

5章 テキストゲームのエンジンを作る

すでに特殊な概念が目白押しで、ここに羅列しただけでは何もわからないのだけど、仕方ないですね。Land of Lisp 5章メモ - koropicot's blogさんを参考にして、今度からはそういう風にまとめよう…と思いました。

 

6章 世界とのインターフェース:Lispでのデータの読み書き

  • print、read
  • princ、read-line
  • 同図象性
  • eval

6.5章 Lambda:とても大事な関数なので特別に章を分けて説明しよう

  • lambdaやばい

7章 単純なリストの先へ

  • ドットリスト、対、循環リスト
  • 連想リスト
  • 木構造
  • グラフ - Graphviz
  • mapc
  • サンク(thunk)、サスペンション(suspension)

まとめ

 5章をやり始めた時は、REPLにポチポチ打ち込んで動かしていたけど、打ち間違いが多すぎて死にそうになったからVimで書いてからコピペするようにしました。いま考えると、なぜ最初からそうしなかったのか意味不明。それをしても7章だと実行できなかったからどうしようもないです。

 テキストゲームは、単純な文章をリストにして、そこから値を取り出しているから、はじめ読んだときはよく考えているなと感心しました。高階関数はまだなれないけど、Lispではバンバン使うはずだからそのうち慣れるだろうと思っています。

 6章では、「ゲームに入力する」ことを目的としていますが、これまたLispはよく出来ているなと感嘆とさせられるようなことばかりでした。特にLispが同図象性を持つという点は興味深いものです。この概念があったから、テキストゲームを例にしたのかな、とそんな気がしました。

 7章は、リストを詳しく説明してから、外部ツールであるGraphvizを導入して、それをコードに組み込んで自動で出力するようにしています。僕から見るとかなり高度な書き方が多く出てくるのですが、特にthunkを使った書き方はちょっとLispのヤバさを感じました。

 この本の「はじめに」で

Lispは数学から連なる、全く独自の系譜を持っている。

 と書かれていることの意味が少しずつわかってきたような、そんな気がします。

5章〜7章では、詳しく説明されていることも多いですが、後の章で説明するようなものも多く登場していて、半分くらいの理解で進めました。そして僕の残念な頭ではこれを書いている時点で、すでに半分以上を忘れ去っているので、1/4理解くらいになっています。頑張ってさくさく進めよっと。