问题标签 [clojure-core.logic]

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 回答
94 浏览

clojure - 如何在 core.logic 中建模顺序关系?

我正在尝试使用核心逻辑对一组有限任务之间的顺序关系进行建模。这是我到目前为止所拥有的:

我运行这个查询:

目标是仅指定数据库中的直接顺序关系(如 1<2、2<3、3<4 但不是 1<3 或 2<4),并让系统从目标的传递性“之前" 与“之后”目标相结合。

如果我要求 2 个或更少的值,我的代码可以正常工作,但是一旦我要求第 3 个值(此时执行应该停止,因为没有更多值可以尝试),程序就会挂起。

为什么会挂在这个时候?我很确定这是 before 目标中定义的递归步骤,但我不确定如何使它工作。

0 投票
0 回答
51 浏览

clojure - core.logic conjo 目标中的意外行为

我很难理解conjocore.logic 中目标的以下行为。

首先,一切似乎都很好。

当 时目标成功q = [1],因为(conj [1] 2 3) == [1 2 3]

另一方面,当我要求 2 时lvars,我得到以下我不明白的结果。我期待a = [1]b = 2

语法:- (clojure.core.logic/conjo <lvar:a__25296>是什么意思?为什么我不受lvarsa 和 b 的约束?目标成功的可能性只有一种。

也许我需要再暗示一些。

现在真的很奇怪。我设置b为明确地2,然后没有解决方案存在。

任何线索我在这里想念什么?

编辑 上面的例子中有一个错字。最后一个真的应该是:

0 投票
2 回答
163 浏览

clojure - Clojure core.logic 中的树搜索

一段时间以来,我一直对模型化问题感到困惑,我不得不承认我不知道如何在core.logic.

很容易说:给定一棵树(非循环单向图)和其中的一个顶点,你如何使用core.logic来定义一个允许 lvar 成为给定顶点的任何可到达顶点的目标?

我从尽可能简单的事情开始:

鉴于这种配置,我的目标是定义一个目标,它允许 lvar 采用 ['a 'b 'c 'd] 中的值。使用“1 hop”获得可到达的顶点很简单:

你可以为 2 跳添加变量等等,但是......它可以概括吗?我想用类似的东西定义一个 lvar 列表

但是经过几次尝试,我必须承认我不确定这是正确的方法。

0 投票
1 回答
169 浏览

clojure - 字符串的 core.logic 查询包含

我很好奇是否有可能(如果有的话应该如何实现)类似

在 core.logic 中。

一个示例用法类似于

提前致谢,

布吉

0 投票
1 回答
170 浏览

java - 可以直接从 Java 中使用 core.logic 吗?

是否可以从 Java 代码中有效地使用 core.logic?如果是这样,将不胜感激一个简单的例子。如果没有,有人可以指出纯 Java 的替代方案吗?

0 投票
1 回答
373 浏览

clojure - clojure 的 core.logic 使用什么算法来解决?

根据维基百科,序言使用SLD Resolution。在 core.logic 中驱动求解的主要算法是什么?

0 投票
1 回答
44 浏览

clojure - core.logic 解释 `fresh` 如何改变结果

刚从core.logic版本“0.8.11”开始:

我不明白结果:(1 1)

我的理解是我a用fresh创建了另一个变量,它可以取2或3q的值。并且可以取1。因此我期待看到类似的东西:(1), or (1 2 1 3),或者可能([1 2] [1 3])甚至({:q 1 :a 2} {:q 1 :a 3}),但不是实际的结果。

另一个例子:

有人可以解释这里发生了什么吗?

0 投票
0 回答
66 浏览

clojure - Clojure core.logic conde; 如果条件失败/成功则退出

当条件失败时,有谁知道如何退出/尝试 conde 中的下一个条件?

例如:

如果第一个目标

在条件 B 失败它应该立即停止,因为目标

绝对是真的。

谢谢!

0 投票
1 回答
149 浏览

clojure - 如何对一系列 lvar 进行操作

假设我想获得等于给定值的所有纸币/硬币面额组合,同时也给出一组可用面额。

例如,因为(change 14 #{1 2 5 10})我希望

我的尝试是

但自然最后一行不起作用。我还没有找到一种方法来reducevars序列进行某种处理,或者其他一些方法来设置对每个 lvar 无效但对整体无效的目标(同时还对外部值进行一些操作,amountdenominations这个例子中)。

0 投票
1 回答
223 浏览

clojure - clojure.core.logic 中是否有逻辑的 for-all ?

我正在尝试使用 clojure.core.logic 解决 Smullyan 的 To Mock a Mockingbird 中的第一个难题,不是因为它特别难,而是作为一种练习。谜题说有一个花园,有三种颜色的花:红色、黄色和蓝色。每种颜色至少出现一次,无论您采摘哪三朵花,其中都会有一朵红色和一朵黄色。问题:第三个一定是蓝色的吗?
逻辑代码的基本骨架非常简单:

countocontainso手动实现并做显而易见的事情。我是新手,所以我可能缺少现有的库支持。重要的一行是以 . 开头的那一行forallforall基本上是我希望存在的,但似乎找不到。我知道的唯一可以放在这个地方的构造是fresh。但fresh本质上执行存在量化∃。我在这里想要的是全称量化∀。
我对可以选择包含红色和黄色的三朵花的花园不感兴趣。我对一个必然导致这种选择的花园感兴趣。