只有 8 个指令的编程语言
如果一个编程语言只有8个指令,你一定会想:天啊,它能干嘛!
实际上,它是图灵完备所需的最少指令数。
在可计算性理论里,如果一系列操作数据的规则(如指令集、编程语言、细胞自动机)可以用来模拟单带图灵机,那么它是图灵完备的。
没错,这就是 Brainfuck 语言,它的八个指令是:> < + - . , [ ]
> 右移指针
< 左移指针
+ 当前位置+1
- 当前位置-1
. 输出当前位置的ACSII码
, 输入一个字符到当前位置
[ 如果当前位置为0则跳转到匹配的]处
] 跳转到匹配的[处
其应对的 C 语言指令是:
> ++p;
< --p;
+ ++*p;
- --*p;
. putchar(*p);
, *p = getchar();
[ while (*p) {
] }
用 Brainfuck 写出来的程序如同它的名字一样难懂,例如这个 hello world:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]
>++.>+.+++++++..+++.>++.<<+++++++++++++++.
>.+++.------.--------.>+.>.
这段程序将会输出 Hello World!
我写了一段能输出233
的程序:>+++++++[<+++++++>-]<+.+..
如果你有兴趣玩转 Brainfuck 的话,可以试试 Github 这一个基于 javascript 的 brainfuck-debug,可以在这里或者这里运行你的程序。
另外,在 http://codegolf.stackexchange.com 上面有很多大神用 brainfuck 实现各种不可思议的程序。