編輯:David 小鹹魚
【新智元導讀】近日,一位法國開發者Chloé Lourseyre在她的個人博客上提出了「貓貓計算機」的概念。由此,她提出了一個天馬行空的想法:貓是不是「圖靈完備」的?它是「圖靈機」嗎?
軟萌可愛的貓咪,總會喚起我們想要「擼貓」或者「吸貓」的衝動。
和貓咪待在一塊,還真有種治癒的感覺。
而且,按照一位法國開發者Chloé Lourseyre的說法,貓咪甚至可以當計算機用!
近日,在她的個人博客上討論了一個很重要的話題:貓是不是「圖靈完備」的?它是「圖靈機」嗎?
測試對象就是這隻小貓Peluche
Peluche是一隻毛茸茸的小貓,就住在Chloé Lourseyre家裡。它就是今天的測試對象。
什麼是圖靈完備?
圖靈完備性的概念是,如果某台設備可以模擬圖靈機,那麼它就可以執行任何類型的計算。
也就是說,任何能夠通過以下4項測試的機器都是一台計算機(因此可以執行任何類型的計算)。這4項測試是:
- . 和 , —— 輸入和輸出一個值。
- + 和 – —— 增加和減少當前存儲單元中包含的值。(圖靈機有一個「存儲帶」,上面有「存儲單元」。機器總是指向一個存儲單元,也就是上面提到的「當前」存儲單元。)
- > 和 < —— 向左或向右移動當前存儲單元。
- [ 和 ] —— 執行循環。
所以,如果 Peluche 能夠通過這4項測試,就可以認為它是「圖靈完備」的。
圖靈完備性的證明
輸入輸出
首先,為了驗證能不能得到反饋,Chloé Lourseyre用手戳了戳 Peluche。
它看了Chloé Lourseyre一眼,然後才轉過身。
所以是這樣的:Chloé Lourseyre戳了它一下,然後得到了一個反應。結論很明確,Peluche可以處理輸入,並給出輸出。
輸入、輸出已確認!
增減內存值
前幾天,Chloé Lourseyre下班回來,發現廚房變成了這樣:
到處都是貓糧……
但後來Chloé Lourseyre仔細觀察了一下,發現可以把撒上貓糧的地板按位置進行編號,就像下面這樣:
在Chloé Lourseyre看來,這看起來很像內存帶!Peluche可以將貓糧灑在地磚上,然後直接在地磚上吃掉它們,因此,Peluche可以增加和減少給定存儲單元中包含的值。
增減內存值,已確認!
左右移動當前內存單元
還有一次,Chloé Lourseyre在洗碗時不小心把一些水灑在了 Peluche 身上。它開始在廚房裡到處亂跑,弄得一團糟。
但是如果仔細觀察(在紅色箭頭的尖端),不難注意到,Peluche一邊亂跑,一邊把自己裝食物的碗移動了位置。
也就是說,Peluche將它的食物灑到另一塊瓷磚上。這相當於移動指向當前內存的指針,編輯另一個內存單元。
移動內存單元,已確認!
執行循環
在廚房被Peluche搞的一團亂之後,很明顯,Chloé Lourseyre不得不清理打掃。
然後不到五分鐘後,Chloé Lourseyre回到廚房,又變成這樣了:
所以,Peluche絕對可以執行循環……
循環已確認!
到這裡為止,Chloé Lourseyre已經證明了Peluche確實是「圖靈完備」的。那麼下一個問題是,如何使用Peluche來執行高性能計算任務?
如何執行?首先要有代碼,Chloé Lourseyre編了一段簡單的代碼,就像下面這樣:(這個代碼示例是一種奇特的新語言,名為「braincat」)
結果:Peluche什麼都不做!
所以最後,Chloé Lourseyre不禁想,雖然貓是「圖靈完備」的,但可能不是為了執行代碼而設計的?
關於「貓貓計算機」
上面的「貓貓計算機」當然都是說笑話。根據Chloé Lourseyre的經驗,當有人發現一種語言的新特徵時,就開始到處使用。
「貓貓計算機」似乎是一個新手會犯的錯誤,但即使是最有經驗的開發人員,有時也會犯新手錯誤,承認這一點沒什麼難為情的。
實際上,在面對程式語言的全新版本中的新功能時,積累經驗的最好辦法,就是把每個功能錯誤地使用一次,以避免今後的誤用。
在使用某項功能之前,一定要先問問自己,這樣做實際上是否有必要,否則你也可能犯下像「貓貓計算機」這樣的錯誤。
另外,貓貓計算機很費貓,所以不要這樣做。
(此文的寫作過程中,沒有貓貓受到傷害,但有一隻貓被輕輕地戳過幾下。)
參考資料:
https://belaycpp.com/2021/11/24/is-my-cat-turing-complete/
https://en.wikipedia.org/wiki/Turing_completeness