コルーチンとギャラクシアン
SICP読書会で、26日に継続について話してほしいとのこと。
前回、id:zyxwvさんがC言語で書いたS式計算機を披露したとき、彼は、パーサ、というかミニ正規表現、の有限状態遷移を書くために、switch文があふれかえってしまい、困っているとのことだった。
これは、C言語で有限状態マシンを書くにはどうしたらよいか、ということだ。
つ"
エキスパートCプログラミング―知られざるCの深層 (Ascii books)
- 作者: ピーターヴァン・デ・リンデン,Peter van der Linden,梅原系
- 出版社/メーカー: アスキー
- 発売日: 1996/03
- メディア: 単行本
- 購入: 17人 クリック: 404回
- この商品を含むブログ (78件) を見る
本質的に書きたいのは相互再帰なんだけど、C言語で再帰を書くとスタックを消費してしまうことに抵抗があって、この本の実装に落ち着いたんじゃないかなと思われる。
つ"タスクシステム"
昔懐かしのギャラクシアンで、タスクシステムが使われたらしい。シューティングゲーム開発に便利。ただ、C言語にはクロージャがないので、関数ポインタ+データを使わなきゃならない、ついでに無名関数がないので、いちいち関数を宣言しなきゃならない。switch文よりはマシ。
で、C言語のタスクシステムは、Schemeでいうコルーチンだ。コルーチンには継続だ。
コルーチンは、ノンプリエンプティブだ。で、格闘ゲームでは、波動拳のモーションの途中で攻撃をくらったらヤラレモーションにはいる。これってプリエンプティブじゃない?知らないけど。
だからSchemeでいうエンジンが役に立つかもしれない。知らないけど。
エンジンについては独習3週間と本格的にはKent本をどうぞ。
エンジンを使うと並列論理和ができる(ってKent本に書いてあった。)。