问题标签 [logic-programming]

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 投票
2 回答
832 浏览

prolog - `append` 谓词是尾递归的吗?

Prolog 中列表处理的典型代码示例是append

我的问题是这个程序是否是尾递归的。我猜不是根据我在函数式语言方面的经验。但是,我发现 Prolog 程序更难判断。看来我们必须考虑统一。

0 投票
1 回答
469 浏览

clojure - Clojure.logic 与 The Reasoned Schemer 的区别

我一直在使用 Clojure.logic 完成The Reasoned Schemer (TRS),并注意此处记录的差异。我到达第 3 章的第 24 帧,TRS 报告说

应该产生

现在,我实现了`lolo as

这会产生以下奇怪的结果:

这基本上意味着我的 lolo 正在产生泄漏出新变量的解决方案。如果我继续前进,试图看到一个模式,我会得到

但我在雾中看不清楚,我希望能对此有所了解。这是我lolo的一个错误吗?它是 clojure.logic 中的错误吗?TRS 中的求解器和 clojure.logic 中的求解器之间存在合理的区别吗?我如何解释或使用结果?我如何在心理上预测 clojure.logic 的结果?

0 投票
1 回答
365 浏览

logic-programming - pyDatalog:是否可以定义多个独立的数据记录会话?

我正在编写一些代码来评估数据库中的数据,以查看传入事件流中的实例是否符合一组协议。这个想法是使用 pyDatalog 来做到这一点。理想情况下,我们希望能够根据几个独立的规则集评估数据,这些规则集定义了事件应遵守的单独协议。

换句话说,是否可以创建几个逻辑独立的 pyDatalog 会话,每个会话都有自己的规则集,但从同一个底层数据库获取数据?

0 投票
2 回答
193 浏览

python - pyDatalog:询问查询时“对象与查询的类不兼容”

我正在开发一个使用 pyDatalog 查询 sqlite 数据库的程序。数据库中的key表为Event,定义如下:

然后,每个事件都引用一个包含更多信息的详细信息表。

我想要做的是对序列中的每个事件运行一系列查询。使用 pyDatalog.load() 从外部文件加载规则集

我遇到问题的部分是将每个事件 ID 的引用从 python 传递到数据日志中。我不断收到错误“TypeError:对象与查询的类不兼容”。

我已将规则减少到这些以进行调试:

询问查询的代码如下所示(较大类的一部分):

如果我取消注释 "query='parent(bill,X)'" 行,它可以正常工作(它打印 (bill, 'John Adams') 元组),但使用 "query = 'getEvent(..." 行,它在上面显示的最后一行出现上述错误。

有谁知道这个错误是什么意思,以及如何正确地将事件 ID 的引用传递给 pyDatalog?

0 投票
1 回答
214 浏览

java - 以预测逻辑方式使用 java

前提('直到第 7 点,让我们假装它们都是真实的、合理的或相关的,拜托)

(1) Java 是免费的,有 Swing 和 Javafx 等。

(2) 关于Java有很多文档、教程等。

(3) 我想用它来做一个本体论——一阶逻辑推理

(4) 我知道protegé,但还不够

(5) 举个例子:

  1. 谓词逻辑语言。

    • 假设我们在谈论水果

声明性语言中的伪代码

公理或类似的:域和函数

  1. Java代码翻译

我会为“A扩展B,C”使用接口

(6) 项目草图如下:
(6.1) DB或文件(可能是xml文件或txt。例如F1.txt),其中的句子类型为“A是一个类”,“B是一个子类” A”等被收集(表示为“includeIn(B,A)”等);
(6.2) 另一个用于函数谓词签名的文件 (F2.txt):“f:Y -> Boolean”、“g:X -> Y”等。
(6.3) 另一个关于事实的文件 (F3.txt):“x isIn X", "y isIn Y", "f(g(x)) == true AND not(f(y))"
(6.4) 一个“翻译”(通过反射)F1 的 Java 程序 (J1.jar) .txt 和 F2.txt 在第二个 java 程序 (J2.jar) 中,文件 F3.txt 用于附加新事实并删除一些旧事实。

(7) 项目比率:添加事实(文件 F3.txt)和规则(F1.txt 中的域或 F2.txt 中的谓词-函数)更简单(我想是),而不是在需要时修改 java 代码。和 Java 一样有很多库、ide、gui 工具等。

(8) 类似的主题和问题(显然不足以满足我的需求):

问题(双重):

是否有这样一个主题或使用 OO 语言以混合方式进行另一种范式的编程方式的名称(它与本体有关http://protegewiki.stanford.edu/wiki/Main_Pagehttp://www. w3.org/TR/owl-features/,描述逻辑和声明式编程)?

您是否认为这是错误的方法(如果您需要声明性-功能性-逻辑编程使用另一种语言:它们是否不如 Java 的 GUI 好,它们不是平台独立的、健壮的等)?

非常感谢

0 投票
1 回答
250 浏览

prolog - 在 Prolog 中使用集合进行约束逻辑编程

clpfd 是 SWI Prolog 中整数的约束编程库。有没有类似的集合库?如果没有,您是否知道任何对实现此类库有用的文章?

它完全可行吗?我真的在寻找任何类型的输入,因为我的谷歌搜索没有返回任何感兴趣的内容。

编辑:搜索时使用引号可以得到更好的结果(doh!)。嗯……无论如何,很高兴收到反馈。

编辑:有一个包含 B-Prolog (clpset) 的库正是这样做的。

0 投票
2 回答
235 浏览

prolog - 建模约束逻辑程序(用于分析)

面向对象的程序可以用不同的模型建模,例如自动机、过程代数、Petri 网或 UML。其中一些模型可用于执行各种分析,以发现性能或设计中的问题。

我正在研究逻辑编程,想知道 CLP 是否有这种模型?您如何分析 CLP 程序?

0 投票
1 回答
555 浏览

prolog - 逻辑编程:如何在消费者之间分配资源?

我有一个任务,我必须在消费者之间分配独特的资源。规则是:

  • 每个消费者都有一组他们可以使用的资源类型,
  • 每个资源都是独一无二的,
  • 每个消费者必须接收 n>0 个资源,
  • 必须分配所有资源。

例如。我们有这个消费者列表和他们的偏好:

  • 答:{X,W}
  • B:{X,Y,V}
  • C: {X, Z}
  • D:{Z}

我们有一个资源列表:[X, W, Y, V, Z]。

如果我们通过遍历消费者列表并为他们提供他们集合中的第一个可用资源来天真地分配资源,我们会在 D 上失败,因为唯一的 Z 已经分配给 C。更好的解决方案是:A(W),B (Y, V), C(X), D(Z)。

对我来说看起来像是一个逻辑编程问题!虽然编写一个为这种特殊情况提供解决方案的 Prolog 程序是微不足道的,但我想要的是一个可以解决任何此类问题的通用程序,或者告诉我不存在给定数据的解决方案。

我应该在哪里看,我应该用谷歌搜索什么,这个问题有名字吗?

0 投票
1 回答
149 浏览

logic-programming - 答案集编程获取系列长度作为输入

我是答案集编程的新手,并试图将问题编码到 ASP 中。我认为这是一个简单的问题。这是代码;

如您所见,有一个由事件组成的序列。在这种情况下,它的长度是 3。但是我希望它由用户决定。例如;

  • 如果用户希望它的长度为 3,那么

外国佬 asp.lp --const n=3 | 表扣

代码应该是这样的;

  • 如果用户希望它的长度为 4,那么

外国佬 asp.lp --const n=4 | 表扣

代码应该是这样的;

我怎么能那样做?谢谢,

0 投票
1 回答
326 浏览

logic-programming - PyDatalog:答案中的值列表

在 PyDatalog 中,我定义了以下断言:

我想询问数据库是否有办法从 A 到达 D。下面的代码应该可以工作,因为如果有办法,它会回答 set([()]),如果没有,它会回答 None。但这并没有给我对Z的不同评估的结果。我也想知道路线,例如:ABCD

我尝试过使用未绑定的值,但它只给了我第一次迭代的结果:

我认为问题在于它在第一次迭代中只需要 P 。或者我应该使用聚合函数?我不太明白如何使用 concat ...

提前致谢。