问题标签 [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.

0 投票
1 回答
235 浏览

graph-theory - 在数据日志中添加循环边缘 (bddbddb)

我有以下规则可以找到图表中的所有路径。

但是,我还想为每个节点 n添加边缘 n->n如果不存在的话。

在没有任何节点关系的情况下如何做到这一点?

0 投票
1 回答
111 浏览

recursion - 使用 Datalog Educational System (DES) 时,是否可以创建类似于 Prolog 中感叹号的效果?

我正在使用 Datalog 教育系统 (DES),我想创建一个示例演绎数据库,该数据库递归地推导出组件的整体价值,该组件也可以具有子组件以及常规零件。如果不是因为我无法阻止递归和非递归子句的执行,它会工作得非常好。以下是造成问题的条款:

在这种情况下,输出基本上翻了一番,因为第一个 rek_as 和第二个 rek_as 子句都被执行了。基本上我想做这样的事情:

但这只是给我一个关于使用错误语法的编译错误。

0 投票
2 回答
517 浏览

clojure - 如何构造一个与 DataScript 中的引用向量完全匹配的查询?

设置考虑以下电影和演员的 DataScript 数据库,数据从learndatalogtoday.org 窃取:以下代码可以在 JVM/Clojure REPL 或 ClojureScript REPL 中执行,只要project.clj包含[datascript "0.15.0"]作为依赖项。

描述简而言之,该数据库中有两种实体——电影和演员(不区分性别的词)和三种 datom:

  • 电影实体:(:film/name唯一的字符串)
  • 电影实体:(:film/cast多个参考)
  • 演员实体:(:actor/name唯一字符串)

问题我想构建一个查询,询问:哪些电影有这些N演员,并且只有这些N演员作为唯一的明星出现,对于 N>=2?

例如,《机械战警》由南希·艾伦、彼得·韦勒、罗尼·考克斯主演,但没有一部电影只由前两位主演,艾伦和韦勒。因此,我希望以下查询产生空集:

然而,这个查询是有缺陷的,因为我不知道如何表达任何匹配都应该排除任何不是 Allen 或 Weller 的演员——再次,我想找到只有 Allen 和 Weller 合作过而没有任何其他演员的电影,所以我想调整上述查询以生成空集。如何调整此查询以强制执行此要求?

0 投票
2 回答
204 浏览

java - GDL Antlr 语法

我需要 Java 中的游戏描述语言 (GDL) 解析器

为此,我目前正在尝试使用 ANTLR4。

我在下面给出的当前语法似乎不正确,或者至少生成的解析器无法识别我还将在下面提供的游戏描述。

ANTLR4-语法:

GDL中给出的游戏描述:

生成的解析器的错误输出:

我不知道我必须改变什么或如何获得正确的语法

任何帮助,将不胜感激

0 投票
1 回答
1084 浏览

declarative - DLV 规则不安全

我开始使用DLV(分离数据日志),并且在运行代码时,我有一条规则报告“规则不安全”错误。规则如下:

我已阅读手册并看到“不允许循环依赖”。我想这就是我被报告错误的原因,但我不确定这个语句对 DLV 来说是如何成问题的。最终目标是在未定义谓词的情况下进行某种初始化。

更准确地说,如果没有出现带有参数 R(以及其他任何内容)的 'foo',则使用参数 R 和 1 对其进行定义。一旦定义,则不应再次触发规则。所以,在我看来,这不是一个真正的递归。

欢迎对如何解决此问题提出任何意见!


我意识到我可能需要另一个谓词来匹配规则正文中的参数 R。像这样的东西:

因为,否则将无法知道是否没有出现 foo(R, _)。我不知道我是否说清楚了。

无论如何,这也不起作用:(

0 投票
1 回答
401 浏览

prolog - Datalog code not working in DrRacket

I am trying to run this prolog code in DrRacket: http://www.anselm.edu/homepage/mmalita/culpro/graf1.html

However, it is giving following error:

I suspect '|' symbol is not being read as head-tail separator of the list. Additionally, [] is also giving error (if subsequent line is removed):

How can these be corrected so that the code works and searches for paths between a and g ?

0 投票
2 回答
864 浏览

path - 在 DLV 中找到最短路径

我正在尝试使用 DLV 在图中以最小距离查找所有路径。假设我有以下图表:

图形

我期待获得谓词(我希望我不要跳过任何谓词):

  • 路径(a,b,1),路径(a,d,1),路径(a,e,1),路径(a,c,2)
  • 路径(b,a,1),路径(b,c,1),路径(d,d,2),路径(b,e,2)
  • 路径(c,b,1),路径(c,e,1),路径(c,a,2),路径(c,d,3)
  • 路径(d,a,1),路径(d,b,2),路径(d,e,2),路径(d,c,3)
  • 路径(e,a,1),路径(e,c,1),路径(e,d,2),路径(e,b,2)

我假设您可以向左或向右移动拱门。所以,我尝试了以下方法:

第三条规则的想法是添加 2 条现有路径,如果它们不返回 (X!=Z) 并且还没有一条路径以更短的距离连接相同的边(不是路径(X,Z,V), V < L,#int(V))。我必须添加#int(V),否则规则不安全。我不知道是否有更好的方法可以用整数值解决这个安全问题。

当我运行此代码时(使用标志 -N=5 设置 #maxint=5),我得到不应该存在的路径,例如 path(d,a,5)。我不知道问题出在#int(V) 还是其他问题上,但我不希望这些路径出现,因为我已经有了路径(d,a,1)。可能是因为#int(V) 但我不知道如何正确地做到这一点。

谁能帮我解决这个问题?提前致谢。

0 投票
1 回答
109 浏览

debugging - DLV 交互模式(调试)

我在 DLV 上工作了一段时间,当程序很大时,我发现很难遵循规则的激活。所以我去了手册并检查是否有什么可以让我这样做。

我发现的唯一一件事是前端选项 -FP 但我不确定这是否是我正在寻找的,因为手册没有提供足够的这方面的信息。所以,我做了什么来使用这个标志运行我的程序,但我收到以下错误:

背景知识不得包含聚合

该程序在没有此标志的情况下运行,我无法摆脱聚合。我也尝试了一个愚蠢的程序,但提示了不同的警告/错误:

警告:没有给出计划长度。计划长度默认为零。未指定目标查询。

这是调试 DLV 程序的正确方法吗?有办法吗?

谢谢。

0 投票
1 回答
159 浏览

list - DLV 列表组成

我想知道 DLV 中是否有一种方法可以创建一个列表,其中包含在规则中为真的所有谓词的元素。例如,如果我有以下谓词

我正在寻找的结果应该是新的谓词,其中第一个元素是第一个参数,foo第二个参数应该包含一个列表,其中包含与第一个参数关联的所有元素。经验上:

我知道有一种方法可以使用以下代码获得这些结果(还有更多):

但是我想知道是否有一种方法可以防止生成所有可能的大小从 1 到 N 的列表(N 是最终列表的元素数)。我想这样做有两个原因:(1)降低计算成本(2)防止丢弃所有不必要的谓词。

如果计算成本不是问题(可能是这种情况),我正在考虑进行以下更改,以便仅保留具有最大列表的谓词:

但是,这开始变得复杂,并显示所有最大大小的列表,而不仅仅是其中一个。我如何摆脱除一个之外的所有?我尝试生成 bar(A,P) 只有在它们不是其他 bar(A, _) 但我得到“规则不安全”的情况下。还尝试计算出现次数和出现类似问题...

最重要的是,是否有可能在没有那么多技巧的情况下一次获得我期望的结果?

任何帮助表示赞赏,

谢谢!

0 投票
2 回答
910 浏览

sql - 查询数据记录

我需要以下查询的帮助:

与给定的关系:

Q.:为以下查询提供安全的 Datalog 规则(必要时可取反):

(a) 找出用Height > 5000m.

我是这样写的

但是,如果我必须找到爬过每座高度 > 5000m 的山的徒步旅行者的名字,我很难理解这两个问题中someevery之间的区别。

请指导我。