问题标签 [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.
clojure - Clojure 的 `core.logic` 中的目标排序
以下 Clojure 代码用于core.logic
以两种不同的顺序解决具有相同目标的相同逻辑问题。这种排序选择导致一个快速完成而另一个挂起。
是否有避免此问题的通用解决方案或常见做法?
logic-programming - 将文件中的数据记录程序加载到 pyDatalog
我正在尝试使用 pyDatalog.load() 方法来加载一个小的 pyDatalog 程序。例如,我正在从https://sites.google.com/site/pydatalog/加载阶乘样本
文件 sample_datalog_program.dl 包含以下内容:
我究竟做错了什么?当我用接下来的 4 条注释行替换 pyDatalog.load(mc) 行时,它工作正常。
我得到的错误是:
谢谢!
logic-programming - pyDatalog:处理自定义谓词中的未绑定变量
我正在编写一个 pyDatalog 程序来分析来自 Weather Underground 的天气数据(目前只是作为我自己和公司其他人的演示)。我编写了一个自定义谓词解析器,它返回开始时间和结束时间之间的读数:
这适用于 t1 和 t2 绑定到特定值的情况:
但是,如果我使用其他顺序的条件声明 goodTime 规则(即在它尝试解析 timeBetween 时 Y 和 Z 未绑定),它将返回一个空集:
这似乎是错误的——这两个查询应该返回相同的结果集。
我的问题是在 pyDatalog 中是否有处理这种情况的方法?我认为需要发生的是 timeBetween 谓词应该能够告诉引擎以某种方式退出并尝试在尝试此规则之前先解决其他规则,但我在文档中看不到任何对此的引用。
prolog - 将递归转换为尾递归?
我正在尝试编写一个谓词,它递归地找到某个数字的 n 次方 [A^n = A * A^(n-1)] 并使用快捷方式 A^(2n) = A^n * A^n。
这是迄今为止的解决方案。
现在我想让这个尾递归。我可以为简单的情况做tail,例如没有捷径的阶乘和幂(通过添加一个累加器),但这很难。
任何帮助深表感谢!
clojure - 将 core.logic 扩展到自定义类型
我正在试验core.logic,并希望使我自己的自定义数据类型能够参与逻辑表达式:
基本上,这表示数学表达式树中的一个节点,包含一个节点树和一组使用的未绑定变量。node
是常量、符号或(Operator Expression Expression....)
树节点。我希望能够使用 core.logic 来操作数学表达式,并匹配此类表达式的子树。
如果可能的话,我该怎么做?
我从 core.logic 源代码中看到,有许多协议看起来可以很好地扩展(例如IUnifyTerms
,IReifyTerms
等等),但并不完全清楚这些协议是如何使用的,以及哪些是我真正的需要延长。
clojure - 在 core.logic 中,两个方向的投影算作关系吗?
我知道project
在 core.logic 中是不相关的。
但是,似乎我可以通过在内部的两个方向投影来获得类似关系的行为conda
,例如:
这算作关系操作吗?还是缺少其他东西使这种非关系性?
prolog - 在Prolog中交换列表的连续项目
我正在尝试编写可以交换列表的两个元素的 Prolog 代码,但前提是它们彼此连续。那是,
应该给:
(d 和 e 是连续的。)
然而,
应该总是失败(a 和 e 不是连续的。)
我可以假设一个项目只出现在列表中一次。
我有以下代码,实际上工作正常:
但是,仅通过查看代码,我就可以看出这是一种可怕的方法——重复、低效——只有像我这样的 Prolog 新手才能编写。
任何有关如何改进这一点的建议将不胜感激!
logic-programming - 使用 pyDatalog 进行约束存储
考虑以下规则:
以及找到满足的约束的问题:a(X,1)
问题是:您可以使用 pyDatalog 来提出列表 [(X==1)] 吗?或 [(X>0), (X==1)]?
谢谢,
prolog - 任何允许左递归的 Prolog 实现?
我想知道是否有任何 Prolog 实现允许在子句中进行左递归。我的直觉是,如果实现使用广度优先目标搜索,它可能支持左递归。但我不太确定。请注意,我不太关心效率。
prolog - 制表如何提高效率?
我很好奇制表如何提高 Prolog 程序的效率。它是如何实施的?欢迎解释和参考。