看到標題,不出意外的話,你肯定開始罵我了:**標題黨,什麼程式語言五分鐘就能學會?
其實我本來也是不相信的,但是學過了才知道這是真的。
看到這個小標題,不要誤會,我沒有罵人。
這就是今天文章的主人公,也就是讓你們五分鐘能夠學會的一門程式語言——Brainfuck。
Brainfuck,簡稱BF,是一種極小化的程式語言,由Urban Müller在1993年創造。
目標是建立一種簡單的、可以用最小的編譯器來實現的、符合圖靈完備思想的程式語言。
PS:不得不佩服大佬命名方式,或許這就是大佬吧!!!
學習程式語言,首先就要學習其語法。
Brainfuck 程式語言 由 8 個命令組成:
語法 | 含義 |
---|---|
> | 指標向右移動一格 |
< | 指標向左移動一格 |
+ | 使指標當前格的位元組數值加1 |
- | 使指標當前格的位元組數值減1 |
. | 把當前格數值按 ASCII 表輸出到終端 |
, | 接受一個位元組的輸入,將其值儲存在資料指標的位元組中。 |
[ | 當指標當前值為 0 時,程式跳轉至與之對應的 ] 之後;否則程式正常執行 |
] | 程式跳轉回與之對應的 [ 處 |
自此,你學完了 Brainfuck 語言的所有語法,我想都用不了五分鐘吧。
老規矩,新語言上手的第一步就是要能輸出 Hello World。
問題:這裡我們先練習如何在螢幕列印一個字母 ‘A’ ?
分析:
因為 ASCII 表中 'A' 對應的值為 65。所以你可能很快就會有第一種程式設計方案:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
這裡 +
有65個,然後通過 .
將其輸出到終端,如下:
看上去解決了這個問題,但是這裡的 +
實在太多了,我們程式設計的時候很容易少寫或者多寫,那麼有沒有什麼方法能簡化呢?
ASCII 表中 'A' 對應的值為 65。為了少打幾個 +
,我們很自然的想到乘法運算,65 = 13*5.
所以我們可以通過迴圈來改進上面的方法:
+++++
[
>+++++++++++++
<-
]
>.
這裡我解釋一下上面的語法:
①、第一行,有5個 +
,表示當前格子數加到 5;
②、第二行,一個 [
,表示進入一個迴圈;
③、第三行,表示指標向右移動一格,並且該格子數值為 13;
④、第四行,表示指標向左移動一格,並且該格子數值減 1(初始化值為5);
⑤、第五行,迴圈的結束語句,判斷指標所在格子是否為0,不為0,移動到第3行程式碼繼續執行,為零則退出迴圈。
⑥、第六行,指標向右移動一格,並且向終端輸出該格子的值。
下面通過動圖給大家演示一下:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]
>++.>+.+++++++..+++.>++.<<+++++++++++++++.
>.+++.------.--------.>+.>.
不知道大家學完這門語言之後有什麼感想。
首先我要說的是,這門語言並不是為了設計實際軟體而設計的,而是為了挑戰計算機程式設計的界限。
我們知道計算機界最高獎項叫圖靈獎,圖靈在1936年發表的 "On Computable Numbers, with an Application to the Entscheidungsproblem"(《論可計算數及其判定性問題的應用》)中提出的數學模型——圖靈機(Turing Machine),描述了它是什麼,並且證明了只要圖靈機可以被實現,就可以用來解決任何可計算問題,感興趣的大家可以去研究研究。
這門語言對於我們去理解圖靈思想也是很有幫助的。
比如,一門新的語言,我們要證明其是否是圖靈完備的,如果用數學證明的方式必然會比較複雜,但是如果你能用這門新語言實現一個 Brainfuck 的直譯器,那麼就必然證明其是圖靈完備的。
Brainfuck 語言圖形化演示:https://openprocessing.org/sketch/516467
程式設計師必讀電子書領取:https://mp.weixin.qq.com/s?__biz=MzUwOTQwNTUzNQ==&mid=2247488293&idx=1&sn=1515e62492388c321717dbdc7209990d&chksm=f913e315ce646a03a6daf8a1621f1d127a95fe9ea10a442fc1b0b9eb2dddc5531bac722f3656&token=1554842810&lang=zh_CN