BrainFuck(というプログラミング言語)

2006年9月8日
1 分

cf. どーんとやってみよう - BrainFuck で棒グラフ

なんというか,こんなプログラミング言語があったとは。

見た目にはこれがプログラムだとは思えないんだけど,Wkikipediaにはこうある。

処理系には十分なサイズのbyte型配列とその要素のひとつを指すポインタがある。ポインタを「>」「<」命令で移動させながら、そのポインタが指す値を増減させて処理を進めていく(Hello world参照)。

実用性はほとんど無いように思われるが、これだけでチューリングマシンで実行可能なあらゆるプログラムが記述できる(チューリング完全である)とされている。

つまり,えーと,立派なプログラミング言語だってことか。

見てるだけじゃわからないので,試してみることにする。使ったのはこれ(Windows版)。

http://esoteric.sange.fi/brainfuck/compiled/win/BFI.exe

ちゃんと動いてビックリ(向井さんのとはちょっと違うけど)。

再度Wikipediaによると

実行可能な命令は「8つ」のみである。

  1. ポインタをインクリメントする。ポインタをptrとすると、C言語の「ptr++;」に相当する。

  2. < ポインタをデクリメントする。C言語の「ptr–;」に相当。

    • ポインタが指す値をインクリメントする。C言語の「(*ptr)++;」に相当。
    • ポインタが指す値をデクリメントする。C言語の「(*ptr)–;」に相当。
  3. . ポインタが指す値を出力する。C言語の「putchar(*ptr);」に相当。

  4. , 1バイトを入力してポインタが指す値に代入する。C言語の「*ptr=getchar();」に相当。

  5. [ ポインタが指す値が0なら、対応する ] までジャンプする。C言語の「while(*ptr){」に相当。

  6. ] ポインタが指す値が0でないなら、対応する [ にジャンプする。C言語の「}」に相当。

ということらしい。ついでにいわゆる Hello world プログラムもあった。

++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<
+++++++++++++++.>.+++.------.--------.>+.>.

いろいろいじってると何となくわかってきた。けど,プログラムを読んで動作を理解するのは至難の業だ。動かしてみたほうが速い。

というか,デバッグはどうやってやるんだろう。