コルーチンとギャラクシアン

SICP読書会で、26日に継続について話してほしいとのこと。
前回、id:zyxwvさんがC言語で書いたS式計算機を披露したとき、彼は、パーサ、というかミニ正規表現、の有限状態遷移を書くために、switch文があふれかえってしまい、困っているとのことだった。
これは、C言語で有限状態マシンを書くにはどうしたらよいか、ということだ。
つ"

エキスパートCプログラミング―知られざるCの深層 (Ascii books)

エキスパートCプログラミング―知られざるCの深層 (Ascii books)

の「解読の輪」とか「cdecl」あたり"
本質的に書きたいのは相互再帰なんだけど、C言語再帰を書くとスタックを消費してしまうことに抵抗があって、この本の実装に落ち着いたんじゃないかなと思われる。

つ"タスクシステム"
昔懐かしのギャラクシアンで、タスクシステムが使われたらしい。シューティングゲーム開発に便利。ただ、C言語にはクロージャがないので、関数ポインタ+データを使わなきゃならない、ついでに無名関数がないので、いちいち関数を宣言しなきゃならない。switch文よりはマシ。

で、C言語のタスクシステムは、Schemeでいうコルーチンだ。コルーチンには継続だ。

コルーチンは、ノンプリエンプティブだ。で、格闘ゲームでは、波動拳のモーションの途中で攻撃をくらったらヤラレモーションにはいる。これってプリエンプティブじゃない?知らないけど。

だからSchemeでいうエンジンが役に立つかもしれない。知らないけど。

エンジンについては独習3週間と本格的にはKent本をどうぞ。
エンジンを使うと並列論理和ができる(ってKent本に書いてあった。)。