17

不用多想,在我看来,一大组 Prolog 的功能可以实现为关系演算(又名 SQL)。

有没有人听说过任何工具可以自动将 Prolog 转换为 SQL?

4

6 回答 6

34

是的当然。

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

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

于 2009-11-05T18:12:27.550 回答
4

推荐:

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 先生

于 2012-07-18T17:47:28.067 回答
2

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

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

我会说这是不行的。

于 2009-04-07T06:56:02.523 回答
1

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

这消除了所有限制并将两种语言保持在适当的位置。

于 2011-06-06T13:13:38.907 回答
1

编写了一个翻译器,将 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 的转换器。

于 2018-09-02T00:32:42.867 回答
0

CQL,一个 SWI Prolog 附加包,将 Prolog,或者更确切地说是 Prolog DSL,编译为 SQL:

https://www.swi-prolog.org/pldoc/man?section=cql-examples

于 2022-01-26T12:14:30.887 回答