软萌可爱的猫咪总能激发我们想要「撸猫」或「吸猫」的冲动。
与猫咪相处时,常常会感受到一种治愈的力量。
据一位法国开发者Chloé LouRseyRe的说法,猫咪甚至可以被视为计算机!
最近,她在个人博客上探讨了一个重要话题:猫咪是否具备「图灵完备性」?它是否可以被视作「图灵机」?

测试对象是这只小猫PelUChe
PelUChe是一只毛茸茸的小猫,住在Chloé LouRseyRe的家中,成为了今天的实验对象。
什么是图灵完备性?
图灵完备性意味着,如果一台设备能够模拟图灵机,那么它就具备执行任何计算的能力。
换句话说,任何能够通过以下四项测试的机器都可以被称为计算机,从而能够执行各种计算。这四项测试包括:
. 和 , — 输入与输出一个值。 + 和 – — 增加或减少当前存储单元的值。 > 和 < — 向左或向右移动当前存储单元。 [ 和 ] — 执行循环。
因此,如果PelUChe能够通过这四项测试,就可以认为它是「图灵完备」的。

图灵完备性的验证
输入输出
为验证PelUChe是否能够产生反馈,Chloé LouRseyRe用手轻轻戳了戳它。

PelUChe看了Chloé LouRseyRe一眼,然后转过身去。

结果很明显:Chloé LouRseyRe戳了它一下,PelUChe给出了反应。这表明,PelUChe能够处理输入并产生输出。
输入输出确认无误!
增减内存值
几天前,Chloé LouRseyRe下班回家时,发现厨房变成了这样:

满地都是猫粮
经过仔细观察,Chloé LouRseyRe发现可以将撒落的猫粮地面按位置编号,如下所示:

在她看来,这很像内存带!PelUChe可以将猫粮撒在地砖上,然后直接在地砖上吃掉它们,因此,它能够增加和减少给定存储单元中的值。
增减内存值,已确认!
左右移动当前内存单元
有一次,Chloé LouRseyRe在洗碗时不小心将水洒在了PelUChe身上。它开始在厨房里四处奔跑,造成了混乱。

仔细观察(在红色箭头的尖端),我们可以看到,PelUChe在乱跑的同时,移动了自己的食物碗的位置。
这意味着,PelUChe将食物洒到另一块瓷砖上,这相当于移动指向当前内存的指针,编辑另一个内存单元。
移动内存单元,已确认!
执行循环
在PelUChe搞得厨房一团糟之后,Chloé LouRseyRe不得不开始清理。
不到五分钟后,她再次回到厨房,发现情况变成了这样:

因此,PelUChe显然能够执行循环……
循环确认无误!
到此为止,Chloé LouRseyRe已经证明PelUChe确实具备「图灵完备性」。那么,下一个问题是,如何利用PelUChe进行高性能计算?
如何执行?首先需要有代码,Chloé LouRseyRe编写了一段简单的代码,示例如下:(这个代码示例是一种新奇的语言,名为「bRAIncat」)

结果:PelUChe什么都没做!
因此,Chloé LouRseyRe不禁思考,尽管猫咪具备「图灵完备性」,但可能并不是为执行代码而设计的?
关于「猫猫计算机」
以上提到的「猫猫计算机」当然是开玩笑。根据Chloé LouRseyRe的经验,当人们发现编程语言的新特性时,往往会开始广泛应用。
「猫猫计算机」似乎是新手常犯的错误,但即使是经验丰富的开发者,有时也会犯这样的错误,承认这一点并不丢人。
实际上,面对编程语言新版本中的新功能,积累经验的最佳方式就是错误地使用每个功能一次,以避免将来的误用。
在使用某项功能之前,一定要问自己,这样做是否真的必要,否则你可能会犯下类似「猫猫计算机」的错误。
另外,「猫猫计算机」很耗猫,所以最好不要这样做。
(在本文撰写过程中,没有猫咪受到伤害,但有一只猫被轻轻戳了几下。)
