五分鐘學(xué)會(huì)一門編程語(yǔ)言?
大家好,我是可樂(lè)。
看到標(biāo)題,不出意外的話,你肯定開(kāi)始罵我了:**標(biāo)題黨,什么編程語(yǔ)言五分鐘就能學(xué)會(huì)?
其實(shí)我本來(lái)也是不相信的,但是學(xué)過(guò)了才知道這是真的。

1、Brainfuck
看到這個(gè)小標(biāo)題,不要誤會(huì),我沒(méi)有罵人。
這就是今天文章的主人公,也就是讓你們五分鐘能夠?qū)W會(huì)的一門編程語(yǔ)言——Brainfuck。
Brainfuck,簡(jiǎn)稱BF,是一種極小化的編程語(yǔ)言,由Urban Müller在1993年創(chuàng)造。
目標(biāo)是創(chuàng)建一種簡(jiǎn)單的、可以用最小的編譯器來(lái)實(shí)現(xiàn)的、符合圖靈完全思想的編程語(yǔ)言。
PS:不得不佩服大佬命名方式,或許這就是大佬吧?。?!

2、語(yǔ)法
學(xué)習(xí)編程語(yǔ)言,首先就要學(xué)習(xí)其語(yǔ)法。
Brainfuck 編程語(yǔ)言 由 8 個(gè)命令組成:
語(yǔ)法含義>指針向右移動(dòng)一格<指針向左移動(dòng)一格+使指針當(dāng)前格的字節(jié)數(shù)值加1-使指針當(dāng)前格的字節(jié)數(shù)值減1.把當(dāng)前格數(shù)值按 ASCII 表輸出到終端,接受一個(gè)字節(jié)的輸入,將其值存儲(chǔ)在數(shù)據(jù)指針的字節(jié)中。[當(dāng)指針當(dāng)前值為 0 時(shí),程序跳轉(zhuǎn)至與之對(duì)應(yīng)的 ] 之后;否則程序正常執(zhí)行]程序跳轉(zhuǎn)回與之對(duì)應(yīng)的 [ 處
自此,你學(xué)完了 Brainfuck 語(yǔ)言的所有語(yǔ)法,我想都用不了五分鐘吧。
3、Hello World
老規(guī)矩,新語(yǔ)言上手的第一步就是要能輸出 Hello World。
問(wèn)題:這里我們先練習(xí)如何在屏幕打印一個(gè)字母 ‘A’ ?
3.1 菜鳥(niǎo)版
分析:
因?yàn)?ASCII 表中 'A' 對(duì)應(yīng)的值為 65。所以你可能很快就會(huì)有第一種編程方案:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
這里 +
有65個(gè),然后通過(guò) .
將其輸出到終端,如下:

看上去解決了這個(gè)問(wèn)題,但是這里的 +
實(shí)在太多了,我們編程的時(shí)候很容易少寫或者多寫,那么有沒(méi)有什么方法能簡(jiǎn)化呢?
3.2 進(jìn)階版
ASCII 表中 'A' 對(duì)應(yīng)的值為 65。為了少打幾個(gè) +
,我們很自然的想到乘法運(yùn)算,65 = 13*5.
所以我們可以通過(guò)循環(huán)來(lái)改進(jìn)上面的方法:
+++++
[
>+++++++++++++
<-
]
>.
這里我解釋一下上面的語(yǔ)法:
①、第一行,有5個(gè) +
,表示當(dāng)前格子數(shù)加到 5;
②、第二行,一個(gè) [
,表示進(jìn)入一個(gè)循環(huán);
③、第三行,表示指針向右移動(dòng)一格,并且該格子數(shù)值為 13;
④、第四行,表示指針向左移動(dòng)一格,并且該格子數(shù)值減 1(初始化值為5);
⑤、第五行,循環(huán)的結(jié)束語(yǔ)句,判斷指針?biāo)诟褡邮欠駷?,不為0,移動(dòng)到第3行代碼繼續(xù)執(zhí)行,為零則退出循環(huán)。
⑥、第六行,指針向右移動(dòng)一格,并且向終端輸出該格子的值。
下面通過(guò)動(dòng)圖給大家演示一下:

3.3 輸出 Hello World!
++++++++++[>+++++++>++++++++++>+++>+<<<<-]
>++.>+.+++++++..+++.>++.<<+++++++++++++++.
>.+++.------.--------.>+.>.

4、總結(jié)
不知道大家學(xué)完這門語(yǔ)言之后有什么感想。
首先我要說(shuō)的是,這門語(yǔ)言并不是為了設(shè)計(jì)實(shí)際軟件而設(shè)計(jì)的,而是為了挑戰(zhàn)計(jì)算機(jī)編程的界限。
我們知道計(jì)算機(jī)界最高獎(jiǎng)項(xiàng)叫圖靈獎(jiǎng),圖靈在1936年發(fā)表的 "On Computable Numbers, with an Application to the Entscheidungsproblem"(《論可計(jì)算數(shù)及其判定性問(wèn)題的應(yīng)用》)中提出的數(shù)學(xué)模型——圖靈機(jī)(Turing Machine),描述了它是什么,并且證明了只要圖靈機(jī)可以被實(shí)現(xiàn),就可以用來(lái)解決任何可計(jì)算問(wèn)題,感興趣的大家可以去研究研究。
這門語(yǔ)言對(duì)于我們?nèi)ダ斫鈭D靈思想也是很有幫助的。
比如,一門新的語(yǔ)言,我們要證明其是否是圖靈完備的,如果用數(shù)學(xué)證明的方式必然會(huì)比較復(fù)雜,但是如果你能用這門新語(yǔ)言實(shí)現(xiàn)一個(gè) Brainfuck 的解釋器,那么就必然證明其是圖靈完備的。
彩蛋
Brainfuck 語(yǔ)言圖形化演示:https://openprocessing.org/sketch/516467