文摘您现在的位置是:首页 > 博客日志 > 文摘

我的猫是否图灵完备?

<a href='mailto:'>微wx笑</a>的头像微wx笑 2021-12-22文摘 3 0关键字:   

作者: Chloé Lourseyre编辑: Peter Fordham本文改编自我在 CppCon2021 上的 Lightning Talk。一旦可用,将在此处提供视频链接。本周我将讨论一个更轻松的主题,但仍然非常重要

作者:  Chloé Lourseyre
编辑:  Peter FordhamyMx无知

本文改编自我在 CppCon2021 上的 Lightning Talk。一旦可用,将在此处提供视频链接。yMx无知

本周我将讨论一个更轻松的主题,但仍然非常重要:我的猫图灵完备吗?yMx无知

认识佩鲁奇

Peluche(法语中的“毛绒”的意思)是一只光滑的猫,不知何故住在我家。yMx无知

她将是我们今天的测试对象。yMx无知

Peluche 图灵完备吗?

什么是图灵完备

图灵完备性的概念是,如果设备可以模拟图灵机,那么它就可以执行任何类型的计算1yMx无知

这意味着任何实现以下八条指令的机器都是一台计算机(因此可以执行任何类型的计算):yMx无知

  • .and ,: 输入和输出一个值yMx无知

  • +-:增加和减少存储单元2中包含的值yMx无知

  • ><:向左或向右移动当前存储磁带。yMx无知

  • []:执行循环。yMx无知

所以,如果 Peluche 能够执行这八个指令,我们可以考虑她的图灵完备。yMx无知

图灵完备性的证明

输入输出

首先,如果我能得到反应,我会尝试戳 Peluche。yMx无知

她看了我一眼,然后才转过身。yMx无知

所以它是这样的:我戳了她一下,我得到了一个反应。所以她可以处理输入并给出输出。yMx无知

输入/输出确认!yMx无知

增减内存值

前几天,我下班回来:yMx无知

到处都是狗粮……yMx无知

但后来我仔细看了一下,意识到可以对平板进行编号,如下所示:yMx无知

对我来说,这看起来很像记忆带!由于她可以将粗磨食物洒在瓷砖上,然后直接从地板上吃掉它们,因此她可以增加和减少给定存储单元中包含的值。yMx无知

增加/减少确认!yMx无知

向左或向右移动当前内存单元

还有一次,我在洗碗时不小心洒了一些水在 Peluche 身上。她开始在厨房里到处乱跑,弄得一团糟。yMx无知

如果您仔细观察(在红色箭头的尖端),您可能会注意到,在弄得一团糟时,她移动了她的碗。yMx无知

取代她的碗意味着她会将粗磨食物洒在另一块瓷砖上。这算作移动内存头以编辑另一个内存单元。yMx无知

已确认存储磁带的移位!yMx无知

执行循环

所以,在这个烂摊子之后,我(显然)不得不清理。yMx无知

不到五分钟后,我回到厨房对着这个:yMx无知

是的......她绝对可以执行循环......yMx无知

循环确认!yMx无知

我们刚刚证明了 Peluche 确实是图灵完备的。那么现在,我们如何使用她来执行高性能计算?yMx无知

拿她怎么办?

现在我已经证明 Peluche 是图灵完备的,我可以对她做任何事情!yMx无知

因此,我试图给她简单的代码来执行3yMx无知

image.pngyMx无知

结果是最终的:她什么都不做。yMx无知

虽然它们可以,但也许猫根本不是为了执行代码而设计的?yMx无知

关于“猫计算”

撇开笑话不谈,猫计算是我给这种通用实践起的名字。根据我的经验,经常发生这样的情况,当有人发现一种语言的新特性时,他们开始在任何地方使用它,只是因为他们可以并且想要。yMx无知

但是,就像您可以使用 cat 4但不应该执行代码一样,这并不是因为您可以使用应该使用的功能yMx无知

他们忙于思考是否可以考虑是否应该这样做。yMx无知

侏罗纪公园伊恩马尔科姆博士

包起来

猫计算似乎是一个菜鸟错误(而且确实如此),但即使是最有经验的开发人员有时也会犯菜鸟错误(这并不可耻)。yMx无知

每三年发布一个新版本的 C++。每一次,它都让我想在各种可能的情况下使用新功能。尽管这是围绕此建立一些经验的好机会(在我看来,避免误用功能的最佳方法之一是执行一次这些误用),但这也是获得不良实践的有利基础。yMx无知

在使用某个功能之前,请务必问问自己是否需要某个功能5,否则您可能会进行猫计算。yMx无知

此外,猫计算是虐待动物,所以不要这样做😠yMx无知

感谢阅读,下周见!yMx无知

在写这篇文章的过程中没有猫受到伤害,但有一只被轻轻戳了一下。yMx无知

作者:  Chloé Lourseyre
编辑:  Peter FordhamyMx无知

yMx无知

附录

笔记

  1. 这是一个简化的定义,非常不准确,但对于这个例子来说已经足够准确了。如果你想要真正的定义,去那里:图灵完整性 - 维基百科yMx无知

  2. 我没有明确说明,但图灵机有一个带有“存储单元”的“存储带”。机器总是指向一个内存单元,也就是前面提到的“当前”内存单元。yMx无知

  3. 您可能无法阅读此代码示例——这是我设计的一种奇特的新语言,称为“braincat”。yMx无知

  4. 实际上,我知道您不能使用猫来执行代码,但是为了比喻,我假设您可以。yMx无知

  5. 当然,当该功能具有已知的好处时,就会出现必要性。我说的不是“绝对必要”,而是“实际必要”。yMx无知

转自:https://belaycpp.com/2021/11/24/is-my-cat-turing-complete/ yMx无知


yMx无知

本文为转载文章,版权归原作者所有,不代表本站立场和观点。

很赞哦! () 有话说 ()

相关文章