模板元编程:原始递归?

时间:2011-12-22 06:46:59

标签: c++ programming-languages template-meta-programming computability

this article中,作者断言:

  

...程序确实表明模板实例化机制是一种原始的递归语言,可以在编译时执行非平凡的计算。

我发现这很有趣,因为我帮助教授计算理论课,该课深入研究原始递归函数的理论。然而,我的印象是模板元编程是图灵完备的,这是一个严格更强的声明,而不是说它是原始的递归...毕竟,创建一个不能停止的模板元程序并不是很困难

我错过了什么吗?模板元编程是一种严格的原始递归语言,还是我认为它适用于更广泛的程序?

2 个答案:

答案 0 :(得分:3)

我相信你只是阅读了太多的文本,而“原始”并不是“原始递归”,而是一种“递归语言”(听起来很奇怪,我称之为功能语言,但没关系),这是原始的。

如果你把TMP看作一种功能语言,它就不是一个非常复杂的语言;因此,它是一个原始的。

但你是对的,TMP当然是Turing-complete。

我怀疑很多人都听说过原始的递归语言,所以这只是一个不幸的选择。

答案 1 :(得分:1)

Unruh的程序只演示了原始递归,即循环(当发生这种情况时我确实存在!)。然而,立即认识到支持完全递归(因为实际上实现没有进行尾部优化)。