木匣子

Web/Game/Programming/Life etc.

只有 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 实现各种不可思议的程序。