每週(?)小知識(3)
我到底停更多久了啊,這已經不只是每月小知識了,<s>快變成圭月小知識了</s>
反正我們就開始吧(哈欠
###這次的小知識-只使用了八個運算子的程式語言Brainf**k
Brainf**k到底是三小啊,是腦幹的意思嗎
#並沒有,不要瞎掰好嗎
Brainfuck(以下簡稱BF)是一個很有趣且易學的程式語言喔
而且他只使用了+、-、<、>、[、]、.、,這八種運算子,就通過了圖靈測試
可以說是建構於簡單之上的程式語言(符合圖靈完全思想喔)
最棒的是只要沒學過根本就看不懂你在衝三小,就會覺得你超電
ex.++++++++[>+++++++++<-]>.+.
我想沒學過的人應該是整個黑人問號想說這三小朋友咖哩
不過這段程式語言的意思其實就只是「HI」而已
這麼酷的東西還不快學一波,那我們就趕緊開始吧
###何謂圖靈測試
先從一些基本的開始,不過我想這個大家都知道吧
所謂的圖靈測試簡單來說,就是讓一個人問一個問題,根據得到的回應來分辨哪個是人哪個是機器人
如果分不出來的話,那機器就通過圖靈測試了
雖然很簡略不過大概可以理解了吧,反正我也不想提唯物論和二元論
如果想更了解圖靈測試可以看這邊
<a href = "https://zh.wikipedia.org/wiki/%E5%9B%BE%E7%81%B5%E6%B5%8B%E8%AF%95" target = "_blank">維基百科 -圖靈測試</a>
###BF的運作機制
如果懶得看長文的話就看影片吧,影片也解釋的比較清楚,可以順便練練英聽喔
<a href = "https://www.youtube.com/watch?v=-3C200nCwpk" target = "_blank">How Brainfuck Works</a>
現在正式開始介紹BF囉,首先你要有串列(list)的概念
想像一下現在有很多很多空格,而你現在正指向第一個空格
[0, 0, 0]大概長這樣
所謂+就是現在指向的值+1,-就是-1,應該很好理解吧
ex.+++
[3, 0, 0]變成這樣
<則是指向的值往左一格,>就是往右一格
ex.>>+++<+
[0, 3, 2]就會變成這樣
接下來就是[、]了,這時候就需要具備迴圈(loop)的概念
所謂迴圈就是會一直跑一直跑一直跑到一定次數或條件達成才會停下的東東
在BF中只要迴圈中的其中1個值變成零就會停止運轉了
你可能會問,啊迴圈有啥屌用呢
嗯,他真的很有用喔,舉個老例子,你要輸出100,總不能加100次吧
這時候迴圈就派上用場了
ex.>++++++++++[<++++++++++>-]
首先會變成這樣[0, 10, 0]
然後迴圈每跑一次就會變成[10, 9, 0],[20, 8, 0]這樣
最後就變成[100, 0, 0]了,是不是很簡單呢
最後附上編譯器的連結<a href = "https://copy.sh/brainfuck/" target = "_blank">EI Brainfuck</a>
###輸入與輸出
那麼.跟,又是幹嘛用的呢?
就是標題所講的輸入與輸出喔
所謂輸入(input)就是將你所想要的值直接輸進電腦,輸出(output)就是把當前的值輸出讓你看到
應該很好懂(吧
###何謂ASCII
這時候你可能已經躍躍欲試了,正當你打完一堆+-<>等不及想看結果時
你就發現三小都沒跑出來,問號
這是因為BF使用的是ASCII的輸入法
附個連結<a href = "https://zh.wikipedia.org/wiki/ASCII" target = "_blank">ACSII - 維基百科</a>
基本上都是顯示英文啦,如果你想要打出西歐語言的文字可以參考EASCII喔
表上對應到的字元就是你會輸出的東西
ex.++++++++[>+++++++++<-]>++.-.<++++[>++++<-]>+..
我們所輸出的值為74、73、90、90,對應到表上的J、I、Z、Z
所以就會輸出JIZZ,相信大家都了解了吧
###總結
看來你學會了一個很簡單但看起來很電的東西了呢,恭喜你
其實BF除了上述的基本東東還有很多玩法,但礙於版面我就不一一介紹了
大家就自己去查查看吧~~~
這次超長的每週小知識就到這裡,我們下次再見
#所以我說那個喝杯咖啡吧系列呢
#秒分時口巴給我出來
#不然今天補習我就去堵你
2018-08-09 14:10:54
留言
Last fetch: --:--
現在還沒有留言!