是否有任何编程语言都使用通用递归函数作为基础?


23

这是一个幼稚的问题,因此可能是畸形的问题,因此请您提前道歉!

我的观点是,图灵机可以看作是过程/命令式编程语言的计算基础。同样,lambda演算是函数式编程语言的基础。

我最近了解到,Church-Turing论文还显示了与第三种计算模型的等效性:通用递归函数。是否有任何编程语言将其用作其计算模型?如果不是,是否有技术原因?即,除了“没有人尝试过”之外?


1
我想说图灵机或通用寄存器机是处理器PL(组装PL)的基础。它们没有功能。μ mu-递归函数是命令式PL的基础。它们没有高阶函数。
beroal '18

1
我还建议研究一阶逻辑和Prolog。
beroal '18

1
在C ++ 11之前,constexpr您可以(必须)使用“模板”来让编译器在编译时完成计算。模板上的限制不允许循环,但是您可以使用递归来模拟任何循环,从而最终获得图灵完备的(元编程)功能作为C ++语言标准的一部分,请参见例如stackoverflow.com/questions / 189172 / C-模板-图灵完备
JimmyB

Answers:


45

问题的直接答案:是的,存在基于 mu-递归函数的神秘且高度不切实际的PL (请考虑空白),但是由于有效的原因,没有实用的编程语言基于 mu-递归函数。μμμ

通用递归(即 mu- 递归)函数的表达能力远不如lambda结石。因此,它们为编程语言奠定了较差的基础。您还不正确认为TM是命令式PL的基础:实际上,好的命令式编程语言比 -calculus 更接近于Turing机器。μλ

在可计算性方面, mu-递归函数,图灵机和未类型化的 -calculus都是等效的。但是,未分类的LC具有其他两个都没有的良好性能。它非常简单(仅3种语法形式和2条计算规则),高度组合,并且可以相对容易地表示编程结构。而且,配备了一个简单的类型系统(例如,用扩展的System), -calculus可以极具表现力,因为它可以轻松,正确和组成地表达许多复杂的编程构造。您还可以扩展λμλ˚F X λ λFωfixλλ-演算很容易包括不是lambda的构造。上面提到的其他计算模型都没有为您提供这些出色的属性。

图灵机既不是通用的,也不是通用的(每个问题都需要有一个TM)。没有“功能”,“变量”或“组成”的概念。TM是命令式PL的基础也不完全正确-FWIW,命令式PL与图灵机相比,具有控制操作员的λ结石要紧密得多。有关详细说明,请参见Peter J. Landin的“ ALGOL 60与教堂的Lambda表示法之间的对应关系”。如果您使用Brainf ** k编程(实际上实现了相当简单的Turing机器),您将知道Turing机器不是编程的好主意。

μ μ Ñμ mu-递归函数在这方面与TM相似。它们是组成成分,但不像LC那样组成成分。您也无法在 -recursive函数中对有用的编程结构进行编码。此外, -recursive函数仅在进行计算,并且在进行其他任何计算时,您都需要使用某种Gödel编号将数据编码为自然数,这很痛苦。μμN

因此,大多数编程语言都基于 -calculus并非巧合!该演算具有良好的性能:表现力,组合性和可扩展性,其他系统缺乏。但是,图灵机适合于研究计算复杂性,而递归函数则适合于研究可计算性的逻辑概念。它们都具有 -calculus所缺乏的突出特性,但是在编程领域中 -calculus显然是成功的。λμ λ λλμλλ

实际上,那里有很多很多的图灵完整系统,但是它们都没有任何出色的特性。Conway的“生命游戏”,LaTeX宏,甚至(有些人声称)DNA都是图灵完整的,但是没有人使用Conway编写程序(即进行认真的编程),也没有人研究使用LaTeX宏进行的计算复杂性。它们只是缺乏良好的性能。就编程而言,图灵本身本身几乎没有任何意义。

同样,许多非图灵完整的计算系统在编程时也非常有用。正则表达式和yacc并不是图灵完整的,但是它们在解决特定类别的问题方面非常强大。Coq也不是图灵完整的,但是它的功能非常强大(实际上,它比图灵完整的表亲OCaml 更具表现力)。在编程方面,图灵的完整性不是关键,因为许多(接近)无用的系统对图灵的完整性毫无意义。您不会声称Brainf ** k或Whitespace是比Coq更强大的编程语言,是吗?一个表现基础的关键在于强大的编程语言,这就是为什么现代的编程语言几乎总是基于λ-结石。


7
“没有一个使用Conway的程序” ...一些确实在Conway的《生活游戏》中构建了俄罗斯方块的工作游戏 ...的确也像空白一样实用:)
Alexei Levenkov

λλ

@AlexeiLevenkov那是完全不正确的。空格本质上是一种(简单的)命令式语言,尽管语法很奇怪。它具有用于算术,基本控制流,堆栈和堆操作以及I / O的功能。另一方面,QFT项目要求设计一种编译器,从非常简单的语言到为使用OTCA Metapixels模拟的Wirewire式自动机中内置的CPU创建的RISC程序集。
非内容拼写检查'18

@AlexeiLevenkov最终的Cogol→CGoL编译器需要四年多的人的工作,同时存在一个名为HaPyLi的项目,该项目为Whitespace编译了一种更为复杂的语言,该语言由一个人在空闲时间编写。
语境拼写'18

4

µ-recursive function programming language在Google中输入内容使我进入了该GitHub存储库,因此您问题的答案是:

是的,这叫做近视

顺便说一下,它是用Haskell编写的。


μ

2
当然。我只是以为OP希望找到一种语言来学习理论或某种东西,而不是用它真正征服世界;-)
Kapol
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.