[2453] Excel Lambda

Title Text:Extremely rude how Turing’s later formulations of the halting problem called me out by name specifically.

Origin:https://xkcd.com/2453/

https://www.explainxkcd.com/wiki/index.php/2453:_Excel_Lambda

Excel λ

随后图灵在关于停机问题的定理中居然特意点我大名批评我,太粗鲁了!

http://xkcd.in/comic?lg=cn&id=2453

Cueball正在计算,而Ponytail批评他的方式让人想起了Code Quality系列,尽管不那么苛刻。Cueball有很多奇怪的计算机问题,很可能会导致另一个问题。

漫画从Ponytail开始,发现Microsoft Excel正在向其函数库添加lambda函数。这是微软于2020年12月为Beta用户宣布的,但也许Ponytail才是最近才发现的。lambda函数是一种基本的数学结构,可用于完全定义从根本上进行的所有可能的计算,即所谓的lambda演算,类似于Maxwell方程式定义经典电磁学的方式。它们通常在LispPython和许多其他编程语言中找到。Lambda函数也称为匿名函数因为在大多数语言中,它可以传递给其他函数(包括另一个lambda函数),而无需在编码过程中使用任何正式名称,也无需使用其调用过程希望使用的任何名称来给出“闭包”

发现Excel正在添加一个lambda函数令Ponytail高兴了。Cueball声称lambda函数是不必要的,因为当他需要任意计算时,他只是在工作表的侧面添加了一个列块,并由Turing机器对其进行处理。从技术上讲,这将是可行的,因为lambda演算在形式上等效于Turing机。人们虽然不是出于实用目的,但在excel中创建了图灵机

马尾辫发现他的解决方案很荒谬,并坚信Cueball“在计算上做错了”。但是他引用了Church-Turing的论点,声称所有计算同样是错误的,该论点提出了一个假设,即当且仅当该功能可由图灵机计算时,才可以通过执行一系列指令来计算功能。一台经典的图灵机使用无限长的磁带条作为内存;对于Cueball,大型Excel列用作“磁带”。所有计算方法都是“同等错误的”,因为根据本论文,它们都可以转换为图灵机或从图灵机转换而来。

马尾辫和Cueball似乎对“计算”有不同的想法。与大多数程序员一样,马尾辫可能会将效率和可读性作为“正确执行计算”的重要特征。Cueball似乎只对可计算性感兴趣,这是比马尾辫更理论的观点。

马尾辫然后说,如果Turing看到Cueball的电子表格,他会改变主意,大概是因为Cueball的电子表格中的代码极其复杂。库埃鲍尔的最终声明是,图灵可以要求他停止比赛,但无法证明他是否真的会停止比赛。

Cueball的最终声明是对标题文本中提到的暂停问题的引用。问题是确定给定的图灵机是否停止。该问题已被证明是无法确定的,即,不可能建立一种算法来计算任何图灵机是否停止。由于Cueball的行为方式,他在图灵后来的中止问题表述中被特别提及。Cueball觉得这很不礼貌。这当然是个玩笑,因为图灵自1954年就去世,大概是在Cueball出生之前就死了。但是,如果科学家对一个人如此生气,以至于在提出严重问题时提到这个人的名字,那的确的确是疯狂的。

2180:Spreadsheets中还提到了过于复杂的电子表格

Python中的lambda函数示例,该函数采用名为a的参数并计算值a -squared减去1:

   lambda a:(a ** 2)-1

Lambda值通常用作其他函数的参数,例如map,该函数将函数应用于“迭代”的每个项目,例如数字1、2和3的此列表:

   map(lambda a:(a ** 2)-1,[1、2、3])   #将生成值0、3和8 

您可以将此语句复制/粘贴到Python解释器(例如TutorialsPoint)中以查看其工作原理(不要复制前导空格;这是Wiki的事情):

   print(list(map(lambda a:(a ** 2)-1,[1,2,3]))))

在上面的示例中,map依次获取列表中包含值1、2和3的每个元素,将每个值发送到lambda函数(作为参数“ a”),并生成值序列:0、3 ,和8。然后将它们重建为列表打印完整结果:[0,3,8]

递归lambda可能是:

  def pointless_recursion(v):
     #如果当前值(x)被4整除,则返回源(v)*当前(x)
     #否则,输出当前值,然后使用当前值x + 3再次尝试该过程
     r = lambda x:x * v如果x%4 == 0否则print(x)或r(x + 3)
     返回r(v)
 
  pointless_recursion(12)#返回144(即12 * 12)
  pointless_recursion(11)#打印11、14、17,然后返回220(即20 * 11)

在这种情况下,该函数的名称为“ r”,并在其内部以(有条件的)调用此相同的“ r”为特征。“ x”是最后一个传递给“ r”的值,而“ v”是最先传递给容器函数的值。

理想情况下,应使用此类技术来减少 而不是增加意粉代码。但这并不是一个已定的结论,尤其是在Cueball的手中。

Leave a Reply

Your email address will not be published. Required fields are marked *

Categories