问题标签 [datalog]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
artificial-intelligence - 前向链接与后向链接
一个有什么好处,另一个没有在实践中?我了解他们所做的理论,但他们在实际使用中的局限性和能力是什么?我正在考虑将 Drools 与 java prolog 用于一个新的 AI 项目,但对其他建议持开放态度。有哪些流行的方法可以推断复杂的关系数据集或替代方案?
prolog - Datalog vs CLIPS vs Prolog
和很多程序员一样,我在大学里学过 Prolog,但很少。我知道Prolog和Datalog密切相关,但Datalog更简单?另外,我相信我读到 Datalog 不依赖于逻辑子句的顺序,但我不确定为什么这是优势。CLIPS 应该是完全不同的,但它太微妙了,我无法理解。有人可以提供这些语言相对于其他语言的一般亮点吗?
datalog - 为什么以下 Datalog 程序是等效的?
对于一些存在谓词 a,b 为什么会这样:
相当于:
? 为什么顶级递归不能继续扩大?
sql - 从 Datalog 到 SQL 的转换
我还在思考如何将Datalog程序的递归转换成SQL,比如
其中A/1
是 EDB 谓词。P
因此,和之间存在相互依赖关系Q
。对于更长的查询,如何解决这个问题?
此外,有没有系统完全实现翻译?如果有,我可以知道我可以参考什么系统或哪篇论文吗?
datalog - 如何计算分层 Datalog 程序的完美固定点?
Datalog 程序中指令的评估顺序是什么?完美的固定点总是最小的固定点吗?
database - 用于从模型中查找相同属性值的数据日志
我是数据记录新手,想解决以下问题:
我有一个student
模型
现在我想编写一个数据记录程序来查找来自同一城市的这对学生。如果我按以下方式编写程序是否正确?
因为在这里并不重要,我可以在头部和身体上替换它r1
吗?r2
_
欢迎任何反馈!
database - 如何防止 Datalog 规则修剪空值?
我有以下事实和规则:
现在,我想构建一个规则,当“饮酒者”“频率”大于 0 的每个酒吧中可用的“喜欢”啤酒的数量时,该规则应该像返回“真”的谓词一样工作。
当规则不返回元组时,我会认为谓词为真。如果谓词为假,我打算让它返回没有单一“喜欢”啤酒的酒吧。
正如你所看到的,我已经有一个规则来计算给定酒吧中给定饮酒者的好啤酒。我还有一条规则,告诉我可供应啤酒的数量。
如您所见,柜台不会返回经常光顾的酒吧,但有 0 个喜欢的啤酒。我打算通过使用左外连接来解决这个问题。
这几乎是对的,除了它也给了我不常去的酒吧。我尝试添加一个额外的条件:
现在我以某种方式过滤掉了所有包含空值的东西!我怀疑这是由于 DES 中的空值逻辑造成的。
我认识到我可能以错误的方式处理整个问题。任何帮助表示赞赏。
编辑:作业是“very_happy(D) ist wahr, genau dann wenn jede Bar, die Trinker D besucht, wenigstens ein Bier ausschenkt, das er mag。” 转换为“ very_happy(D) 是真的,如果每个酒吧饮酒者 D 访问,至少提供 1 杯他喜欢的啤酒”。由于这个作业是关于 Datalog 的,我认为不使用 Prolog 绝对可以解决。
android - Android 中的多传感器数据记录
我正在开发一个数据记录应用程序来记录 android 设备上所有可用传感器的数据。我想知道哪种方法有效?为所有传感器注册单个侦听器还是为每个传感器注册单个侦听器?
谢谢 Dheepak
prolog - 数据记录分层
因此,我试图了解 Datalog 的工作原理,它与 Prolog 之间的区别之一是它在否定和递归上具有分层限制。引用维基百科:
如果谓词 P 是从谓词 Q 正派生的(即 P 是规则的头部,并且 Q 正出现在同一规则的主体中),则 P 的分层数必须大于或等于分层Q的数量
如果谓词 P 是从否定谓词 Q 派生的(即 P 是规则的头部,并且 Q 否定出现在同一规则的主体中),则 P 的分层数必须大于 Q 的分层数,
因此,这样下去,以下两个谓词不会导致分层错误,因为它们可以简单地分配相同的分层编号。所以这些谓词很好,尽管有循环定义。
- A(x) :- B(x)
- B(x) :- A(x)
但是,如果我们有一个包含一些否定的定义(其中〜是否定),则会发生什么对比
- A(x) :- ~ B(x)
- B(x) :- ~ A(x)
在这里分层是不可能的。A(x,y) 的分层数必须大于 B(x,y),B(x,y) 的分层数必须大于 A(x,y)。我的第一个想法是这不好,因为这是一个循环定义,但只要谓词不被否定,分层就可以循环。但为什么?真值只是二进制的。以这种方式对具有否定符号的公式进行不同的处理似乎是非常武断的。在第二种情况下,这种分层试图防止在第一种情况下是什么?
clojure - n 元谓词 Datomic (n != 2) 可能吗?
我尝试将我读到的关于 Datalog 的内容与 Datomic 的描述相匹配。我在 Datomic 中看到的所有谓词都是三元组,即 [实体属性值] 或属性(e,v),语法更简洁。另一方面,Datalog 支持 n 元谓词,如 pred(a,b,c,d)。
我该如何匹配这个?
- 我是否错过了 Datomic 的一个特性,即它是否有 n 元谓词,或者我可以以某种方式对它们进行建模?
- Datomics Datalog 是通常称为 Datalog 的受限版本吗?