这是今天办公室里发生的.我不打算做这样的事情,但理论上你能用SQL编写一个编译器吗?乍一看,它似乎是图灵完备的,尽管对于许多类的问题来说非常麻烦.
如果它不是图灵完备的,那么它需要什么才能成为图灵完备的呢?
注意:我不想做任何事情,比如用SQL编写编译器,我知道这是一件愚蠢的事情,所以如果我们能避免这种讨论,我将不胜感激.
这是今天办公室里发生的.我不打算做这样的事情,但理论上你能用SQL编写一个编译器吗?乍一看,它似乎是图灵完备的,尽管对于许多类的问题来说非常麻烦.
如果它不是图灵完备的,那么它需要什么才能成为图灵完备的呢?
注意:我不想做任何事情,比如用SQL编写编译器,我知道这是一件愚蠢的事情,所以如果我们能避免这种讨论,我将不胜感激.
事实证明,即使没有真正的"脚本"扩展,比如PL/SQL或PSM(它们被设计成真正的编程语言,所以这有点作弊),SQL也可以是图灵完全的.
在this set of slides年中,Andrew Gierth通过构造一个cyclic tag system证明了在CTE和窗口化的情况下SQL是图灵完备的,这个cyclic tag system已经被证明是图灵完备的.然而,CTE特性是重要的一部分——它允许您创建可以引用自身的命名子表达式,从而递归地解决问题.
有趣的是,添加CTE并不是为了将SQL变成一种编程语言——只是为了将一种声明性查询语言变成一种更强大的声明性查询语言.类似于C++,其模板原来是图灵完成,即使它们不是用来创建元编程语言的.
哦,Mandelbrot set in SQL个例子也令人印象深刻:)