言語 Brainf*ck
http://ja.wikipedia.org/wiki/Brainfuck
8命令しかないけどチューリング完全な言語Brainf*ck
++++++++[>++++++<-]>[>+>+>+<<<-],>[<->-],>[<->-]<[-<+>]<[->>>+<<<]>>>.
2文字の数字入力を受け取りそれぞれの数を足した物を出力するプログラム(1桁のみ)
つまり入力"12"に対して出力は"3"になる。
a[0] = a[0] + 8 //++++++++ for(;a[0];a[0]--){ //[(〜)-] a[1]=a[1]+6 // >++++++ } // < // この時点で a[1]==48 つまりord '0' for(;a[1];a[1]--){ // >[(〜)-] a[2]++; // >+ a[3]++; // >+ a[4]++; // >+ } // <<< // この時点でaの中身は[0,0,48,48,48] つまり三つにコピーした a[1] = getch(); // , // [0,c1,48,48,48] for(;a[2];a[2]--){ // >[(〜)-] a[1]-- // <- } // > // [0,c1-48,0,48,48] a[1]==c1-48=c1-'0'=数字 a[2] = getch(); // , // [0,c1-48,c2,48,48] for(;a[3];a[3]--){ // >[(〜)-] a[2]-- // <- } // > // [0,c1-48,c2-48,0,48] for(;a[2];a[2]--){ // <[-(〜)] a[1]++ // <+ } // > // [0,(c1-48)+(c2-48),0,0,48] for(;[a1];a[1]--0{ // <[-(〜)] a[4]++ // >>>+ } // <<< // [0,0,0,0,48+(c1-48)+(c2-48)] putchr(a[4]); // >>>.
後から48足してるんだから48を2回引かずに1回だけ引けばよかった。
HaskellでBrainfuckのインタプリタ書こうかと思ったけど時間がかかりそうなので後回し
追記。
実際に書いた人が。
http://haskell.g.hatena.ne.jp/mr_konn/20060620
参考になります。
追加。
http://d.hatena.ne.jp/tanakh/20040725
さらに追加
http://www.jmuk.org/d/?path=2006/06/21#d21t01
(さらに)**2 追加 JavaScript版とPerl版
http://blog.livedoor.jp/dankogai/archives/50545151.html
謎のBFブーム