编写通用递归函数


9

通用递归函数是否有简短的显式构造?我所看到的所有定义都以某种方式涉及对Turing机器进行编号,这可能是可行的,但似乎很难且难以用高级编程语言(如Python,Haskell等)编写。


问题最初是在SO提出的,在这里似乎更合适。
sdcvvc 2010年

1
我的理解是,通用递归函数的作用完全是给递归函数(或等效的Turing机器)一些编号,以便可以从递归函数的索引和输入中计算出结果。因此,“没有编号图灵机的通用递归函数”对我来说似乎并不合理。
伊藤刚(Tsuyoshi Ito)2010年

3
没有研究水平。图灵完备语言的任何解释器都是通用的递归函数。
沃伦·舒迪

Answers:



13

当然。编写计算Godel每个原始递归函数的例程,并为无限制搜索运算符编写例程。您可以通过这种方式计算的功能集等效于图灵机可以计算的功能集。更多信息在这里

缺点是,对通用程序的任何输入都需要根据这些简单的操作来构造。当然,这就是编译器的用途。


10

图灵完整的任何语言的任何解释器都是通用的递归函数。有用于高级语言(如C ++或Python)的解释器。

Godel编号存在,但暗含。例如,C ++代码计算一个递归函数为索引。gg


图灵机(或注册机,或递归函数)的解释器也是通用的递归函数,实现它们并不难。几年前,我已经用C ++实现了它们,而且我很确定,在Python中它甚至会更简单。使用Google,互联网上有许多免费的模拟器,其中一些甚至是开源的。
卡夫

8

通用函数u可以很容易地用类似Haskell的语言编写(没有副作用,高阶函数),即:

u f x = f x

该功能u是普遍的,因为它接受(说明)的程序f和输大盘x,并告诉你运行的结果fx

尽管这个答案并不完全是严肃的,但它确实表明,类似于Haskell的语言的编译器或解释器已经包含了通用函数所需的所有构建部件。这个故事的寓意是,花更多的时间在研究编译器和解释器的工作方式上,而不用担心为图灵机实现通用功能。


但是,u需要一个函数-我将其称为高阶函数。我想u使用整数或常规的代数数据类型。只要论证的参数u是有形的,我就不强制使用任何特定的计算模型-例如,它可以从字符串串行化到字符串。
sdcvvc

在实际的机器上(一旦代码被编译)u采用闭包,闭包是有限的字节序列。即使在通常的utm定理中,u采用的整数也代表一个函数。
安德烈·鲍尔

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.