読者です 読者をやめる 読者になる 読者になる

ExcelでBrainfuck処理系

Excel

調べても無かったから書いた. 別に大したことない. ネスト対応してる. 入力だけは実装してない.

https://github.com/itchyny/brainfuck/blob/master/brainfuck.xls

(記事書いた時: https://github.com/itchyny/brainfuck/blob/bc0131e4425872ba58d9c81cb107966547651310/brainfuck.xls )


見たらわかると思うし簡単だから, あまり詳しくは解説しないよ. スクショを一応取っておこう.

brainfuckHello Worldソースコードを書いたらHello, world!って出力される.

ネストの計算は配列数式で. もうちょっと計算効率を上げることはできるけど...

値は全てこんな感じに一セルに一つ. 縦に長い.

Excelっていうのは, 変数というものがなくて, どっちかというと関数型言語の「束縛」に近い. そして循環参照は検知される. 計算のステップ(と言うより, 束縛する項の数)がシートの大きさに対応している. 更に配列数式という, R言語チックなことを一セルで行うこともできる. シート自体をリスト構造として用いることができ, インデックスアクセスすることが出来る. 今回もBrainfuckのソースを一文字づつセルに分けたのは, data String = [Char]ってそういうことだったんですね!!! そう考えると, なかなかにリッチな言語(というより計算資源と言うべきか...)ではないかな.

注意: 私はExcel関数型言語とは主張してませんし, 全くそうは思ってません. 単純に「束縛する」という点に於いて関数型言語チックだと言っているだけです. Excelでは関数を第一級に扱えません. SUMIF, COUNTIFなどはあり, それらの引数に ">100" のような Double -> Bool チックな「関数」を取ることができますが, 所詮文字列を引数にとってそれをパースして処理を分けているに過ぎません. 計算を切り替えたいとき, Excelerは苦し紛れにSUBTOTALという関数を用います.