編輯: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