不用多想,在我看来,一大组 Prolog 的功能可以实现为关系演算(又名 SQL)。
有没有人听说过任何工具可以自动将 Prolog 转换为 SQL?
不用多想,在我看来,一大组 Prolog 的功能可以实现为关系演算(又名 SQL)。
有没有人听说过任何工具可以自动将 Prolog 转换为 SQL?
是的当然。
怀疑论者的前提:任何关于数据库理论的半体面的书都提到Datalog(类似于 Prolog)和证明可以将其转换为关系代数(RA)的定理(在特定限制下)。
SQL 不忠实于 RA 或关系演算,但足以支持 Prolog:
推荐:
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 个 prologs(!)中编译,并在 eclipse 中编译 4 分钟。
当它起作用时,它是一件美丽的事情。
当然要归功于 Draxler 先生
映射不是很好。例如,SQL 不执行回溯、统一、列表或临时嵌套结构。
Prolog 不能很好地处理复合对象、索引等。
我会说这是不行的。
从 prolog 执行 sql 查询更有意义,然后可以将其转换为 prolog 事实。例如Prolog ODBC 库
这消除了所有限制并将两种语言保持在适当的位置。
我编写了一个翻译器,将 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
类似地,有一个用于 SWI-Prolog的Prolog-to-SQL 编译器,以及另一个将 Datalog 的非递归子集转换为 SQL 的转换器。
CQL,一个 SWI Prolog 附加包,将 Prolog,或者更确切地说是 Prolog DSL,编译为 SQL: