星田さんの記事に付いて。
非決定性・・なんか凄そうなんだけどこの前の単元の「継続」とかもちゃんとやってないし全然理解できん(^o^)。
いやいや、かめへんかめへん。
ぶっちゃけ、取り敢えず「マクロ」、つまり「15. 構文の定義 (マクロ)」 まで終われば今のトコ充分です。
そうすればOn Lispを攻略する取っ掛かりは最低限出来る。
そもそも、マクロの章以降「何のためにあるのか」初見はピンと来ないでしょ(笑)?
まず、非決定性。これは「探索」と言う技術のある意味焼き直しなんですが。
何故にこれが取り上げられてるのか?
もちろん一つは「継続の応用」なんですが、もう一つは、このプログラムを世界で一番最初に言い出したのが、Lispの発明者、ジョン・マッカーシー先生なんです。 => Ambiguous Functions(Amb、と言う名前の元ネタ)
彼が最初に非決定性計算、ってのを言い出した為、ルーツ的にはLispに関係あるよ〜、と言わんがために・・・いや、実際そこまで関係ねぇんだが(笑)、いずれにせよそれが理由で良く取り上げられるのです。
だから今んトコ、あんま関係ないでしょうね・・・・・・実際の「探索」に付いてはLand of Lispでスゴいのにお目にかかるでしょう。
んで継続。
実は本当に押さえておくべきは取り敢えずはCPS(継続受け渡しスタイル)です。まずはこれさえ分かれば今んトコ他はほっといて良い。
っつーのも、call/ccをマジメに考え出すと意味が分からなくなる。こいつはSchemeの中の異端です。こいつの性質は「表裏がひっくり返ったクロージャを持つ」事なんですが、多分それだと意味不明でしょう。
しかもこんな機能を持ってる言語はほぼない(辛うじてRubyにある?)。だから他言語と比較出来ない(さすがのPythonにも存在しない)。
ポール・グレアムのOn Lispで継続、そして非決定性で再び同じテーマを目にする事になる。その時、二つの資料(On Lispと「もうひとつのScheme入門」)を突き合わせて見比べて勉強するのが一番効率的なんじゃないか、と思います。
そして驚くべきことに、ここで初めてANSI Common LispがSchemeに敗北するところを見る事になるでしょう。
クラスとか参考になったのと独自のルール(タグ的なものを埋め込んだもの)で書いたシナリオファイルを用意して、それを元にアドベンチャーゲームを作るというのは参考になったなぁ。
まぁ、多分、その本持ってないんだけど、独自言語までイカンでもADV用のバッチとかBASICっぽい何か、を作るハメになったんでしょ(笑)。
これね〜、実際問題ね〜、「プログラミング言語の進歩」ってのはバッチ式、構造化、オブジェクト指向、関数型、とか進歩してるように見えるんだけど、結局 ADVとか書くなら
- 古き良きBASICっぽいバッチ式のプログラミング言語が一番
っつー事になっちゃうんだよな(笑)。
これ、何でか、っつーと多分、
- 「物語」は逐次式で進むのでバッチ式が一番相性が良い
からなんだよね(笑)。
だって、物語で「構造化物語」とかあり得ないわけじゃん(笑)。行動、「恋愛」を定義して、登場人物に適用、ってカンジで書かないでしょ(笑)?
クラス主人公を定義し、クラスヒロインを定義し、それぞれ「愛する」メソッドを定義してるので互いに出るセリフがこれだ、なんつー物語の書き方もしない。
だからADV書くなら古き良き、今だと機能がなくって「ダセェプログラム」になる言語の方が相性良い、って事実を目にするわけだ。
実際、Windowsのエロゲでも基本バッチ式のADV専用スクリプト言語で記述されてる例が多いんです。
Windowsのエロゲって7〜8割方、実は上記のADV専用スクリプトで書かれてるんじゃないかな・・・・・・。
言い換えると、ADVを書くなら「プログラミング言語としては強力で豊富な機能がある」Python使うよりnscripterとか吉里吉里等の専用言語を使った方が簡単だ、と言う身も蓋もねぇ話になります(苦笑)。
ちなみに、PythonにもADV専用で組み立てられてるRen'Pyと言うライブラリが存在します。