Gauche で Land Of Lisp (6章)

2013-03-20 18:40:53

目次

Github

ryotakato/land-of-lisp

6章

ながらく間が開いてしまったが、6章をすすめる。

6章は、5章で作成したテキストアドベンチャーゲームにユーザーインターフェースを追加するというもの。

たとえば、walk eastという操作を実行するために、
5章まででは、

(walk ‘east)

と入力しなければならなかった。
Gaucheのrepl上で作成するならそれは当たり前だが、
やはりゲームする場合は面倒だ。
できれば、

walk east

と入力しただけでいいようにしてほしい。

ということで、
6章では、それを実現するために、
テキストアドベンチャー専用のrepl つまり、game-replを作成するのが目的。

game-replは、三つに分けられる。

  • game-read (コマンド入力)
  • game-eval (コマンド実行)
  • game-print (結果出力)

game-readでは、()や’を入力しなくてもいいように読み込んだ文字列に手を加えて返す。
game-evalでは、不正な動作を起こさないように、あらかじめ定義されたコマンド以外は受け付けないようにする。
game-printでは、結果を人間が見易いような文字列(たとえば、英文の最初を大文字にする)にして表示する。

結構、CommonLispとGaucheの違いがでてきたが、
違うのは、基本的な関数の名称や、引数。
Gaucheではevalに第2引数が必要なんて初めて知ったし。
(だからちょっとだけ答えを見てしまったのは内緒だ)

でも、一番気になったのは、
Gaucheでは、リストを文字列にするときやその逆に文字列を文字のリストにする場合に、
list->stringやstring->listを使うが、
CommonLispでは、 coerce というのを使うらしい。
第二引数に’listや’stringを指定することで、その型?への強制変換とするらしい。
JavaやC#でいうキャストみたいなものかな?

さて、とりあえず、6章はつつがなく進み、
テキストアドベンチャーゲームがそれらしくなった。

次は7章!
どうやらグラフを描くらしい。

ちなみに、6.5章はラムダについての説明で、
関数型に少しでも理解があれば、とくに詳しく書かなくても自明のことだろう。