Prolog构造是面向列表的,因为列表允许将tuple-at-once
Prolog模型合并到all-solutions
关系模型(SQL,比方说)。
我正在考虑将列表处理Prolog代码编译为SQL。
我认为Draxler的编译器pl2sql没有解决问题(适当地,术语list
从未使用过......)。
我在想一个配对翻译的专栏,
append(A,B,C) ~~>
table(append, A_key,A_val, B_key,B_val, C_key,C_val)
其中_key将是行ID,并表示具有不同自连接的关系,根据头部变量的实例化状态选择。
替代设计可能是
append(A,B,C) ~~>
table(append_A, key, val), table(append_B, key, val), table(append_C, key, val)
使用连接,而不是如上所述的自连接。
有谁知道先例工作?
可行性如何?特别是,可以避免存储过程吗?
编辑我找到了FunSQL文件,应该是相关的...要阅读。
答案 0 :(得分:1)
关系数据库模型的第一种常规形式 表示表列应该只存储标量值。
但没有人会阻止你违反这些限制。 您可以使用一些非标量值的序列化 在列中存储非标量值。这也是经常发生的 从实践中发现,将数据结构分解为 标量可能是笨拙和低效的。
通过这种方式,您可以使用SQL来运行带有列表和/或的Prolog 化合物。典型的解决方案将无法完全解决 将Prolog子句或查询转换为SQL但也需要 发布SQL的主机语言中的一些代码 命令。你可能会牺牲一些统一的灵活性 而是实现所谓的允许演绎数据库 在列表存在的情况下不再是数据记录 和/或化合物。
最好的问候