2008年6月9日月曜日

Brainfu*kインタプリタをExcelで作りました。

アドレスはここ↓
http://unkun.ikaduchi.com/excel_bf/index.html


Excelの関数だけで、VBAを使用せずに作りました。
簡単な説明は以下。
  • mainワークシート
Brainfu*kのプログラムを書き込んで、実行結果を確認する。
入力用の文字列はここで設定できる。
  • jump_tableワークシート
Brainfu*kのソースコードを解析して、対応する"["と"]"の位置をそれぞれ、ジャンプ先に設定する。
アルゴリズム的には
<1>"["が現れたら、その位置をスタックにpush。
<2>"]"が現れたら、スタックをpopして得られた位置をジャンプ先に設定する。
<3>最後に"["の位置をジャンプ先に設定している"]"の位置をジャンプ先に設定する。
  • step_execワークシート
brainfu*kのソースコードをステップ実行する。
シートを見ればわかるが、ステップは1024回まで、メモリ領域は16個までしかない(改造すれば広がる)。
jump_tableシートから、プログラムを順番に実行していき、"["や"]"が現れたら、ジャンプ先を参照してループしたり、しなかったりする。
  • 全体的に
無限に広がるワークシートがあれば、チューリングマシンと同等の計算力があると思う。
参照するデータ = 引数、 セルの数式 = 関数、と考えれば、関数型言語であると言ってもいいんじゃないかな?
エレガントなExcelの関数の書き方がわからない・・・。

0 件のコメント: