prolog to SQL转换器

时间:2009-04-07 06:42:09

标签: sql prolog

在没有考虑太多的情况下,在我看来,一大堆Prolog的功能可以作为关系演算(a.k.a.SQL)来实现。

有没有人听说过自动将Prolog转换为SQL的工具?

5 个答案:

答案 0 :(得分:29)

是的,当然。

怀疑论者的前提:任何关于数据库理论的半正式书籍都提到Datalog(类似Prolog)和证明可以将其转换为关系代数(RA)的定理(具体而言)限制)。

SQL并不忠实于RA或关系演算,但足以支持Prolog:

答案 1 :(得分:2)

映射不是很好。例如,SQL不执行回溯,统一,列表或adhoc嵌套结构。

Prolog不能很好地处理复合对象,索引等。

我说这是禁止的。

答案 2 :(得分:2)

从prolog执行sql查询更有意义,然后可以将其转换为prolog事实。例如Prolog ODBC Library

这将删除所有限制,并将两种语言分隔到适当的位置。

答案 3 :(得分:2)

推荐:

https://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/prolog/code/io/pl2sql/0.html

我的建议 - 使用Eclipse prolog(http://www.eclipseclp.org/)(不要(这里)与eclipse IDE中的prolog混淆)。

我花了好几个小时试图让代码在其他4个prolog(!)中编译,4分钟在eclipse中编译。

当它起作用时,它就是美丽的东西。

当然要归功于Herx Draxler

答案 4 :(得分:1)

wrote a translator将Prolog的子集转换为SQL用户定义的函数。

Prolog中的该谓词可以转换为SQL:

is_between(A,B,C) :- 
    A<B,B<C.

这是翻译器作为MySQL函数的输出:

CREATE FUNCTION is_between(A double,B double,C double) RETURNS BIT BEGIN 
    RETURN A>B and B>C;
END

类似地,有一个Prolog-to-SQL compiler的SWI-Prolog编译器和another translator会将Datalog的非递归子集转换为SQL。