在没有考虑太多的情况下,在我看来,一大堆Prolog的功能可以作为关系演算(a.k.a.SQL)来实现。
有没有人听说过自动将Prolog转换为SQL的工具?
答案 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。