问题标签 [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.
clojure - 如何在 core.logic 中建模顺序关系?
我正在尝试使用核心逻辑对一组有限任务之间的顺序关系进行建模。这是我到目前为止所拥有的:
我运行这个查询:
目标是仅指定数据库中的直接顺序关系(如 1<2、2<3、3<4 但不是 1<3 或 2<4),并让系统从目标的传递性“之前" 与“之后”目标相结合。
如果我要求 2 个或更少的值,我的代码可以正常工作,但是一旦我要求第 3 个值(此时执行应该停止,因为没有更多值可以尝试),程序就会挂起。
为什么会挂在这个时候?我很确定这是 before 目标中定义的递归步骤,但我不确定如何使它工作。
clojure - core.logic conjo 目标中的意外行为
我很难理解conjo
core.logic 中目标的以下行为。
首先,一切似乎都很好。
当 时目标成功q = [1]
,因为(conj [1] 2 3) == [1 2 3]
另一方面,当我要求 2 时lvars
,我得到以下我不明白的结果。我期待a = [1]
和b = 2
。
语法:- (clojure.core.logic/conjo <lvar:a__25296>
是什么意思?为什么我不受lvars
a 和 b 的约束?目标成功的可能性只有一种。
也许我需要再暗示一些。
现在真的很奇怪。我设置b
为明确地2
,然后没有解决方案存在。
任何线索我在这里想念什么?
编辑 上面的例子中有一个错字。最后一个真的应该是:
clojure - Clojure core.logic 中的树搜索
一段时间以来,我一直对模型化问题感到困惑,我不得不承认我不知道如何在core.logic
.
很容易说:给定一棵树(非循环单向图)和其中的一个顶点,你如何使用core.logic
来定义一个允许 lvar 成为给定顶点的任何可到达顶点的目标?
我从尽可能简单的事情开始:
鉴于这种配置,我的目标是定义一个目标,它允许 lvar 采用 ['a 'b 'c 'd] 中的值。使用“1 hop”获得可到达的顶点很简单:
你可以为 2 跳添加变量等等,但是......它可以概括吗?我想用类似的东西定义一个 lvar 列表
但是经过几次尝试,我必须承认我不确定这是正确的方法。
clojure - 字符串的 core.logic 查询包含
我很好奇是否有可能(如果有的话应该如何实现)类似
在 core.logic 中。
一个示例用法类似于
提前致谢,
布吉
java - 可以直接从 Java 中使用 core.logic 吗?
是否可以从 Java 代码中有效地使用 core.logic?如果是这样,将不胜感激一个简单的例子。如果没有,有人可以指出纯 Java 的替代方案吗?
clojure - clojure 的 core.logic 使用什么算法来解决?
根据维基百科,序言使用SLD Resolution。在 core.logic 中驱动求解的主要算法是什么?
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})
,但不是实际的结果。
另一个例子:
有人可以解释这里发生了什么吗?
clojure - Clojure core.logic conde; 如果条件失败/成功则退出
当条件失败时,有谁知道如何退出/尝试 conde 中的下一个条件?
例如:
如果第一个目标
在条件 B 失败它应该立即停止,因为目标
绝对是真的。
谢谢!
clojure - 如何对一系列 lvar 进行操作
假设我想获得等于给定值的所有纸币/硬币面额组合,同时也给出一组可用面额。
例如,因为(change 14 #{1 2 5 10})
我希望
我的尝试是
但自然最后一行不起作用。我还没有找到一种方法来reduce
对vars
序列进行某种处理,或者其他一些方法来设置对每个 lvar 无效但对整体无效的目标(同时还对外部值进行一些操作,amount
在denominations
这个例子中)。
clojure - clojure.core.logic 中是否有逻辑的 for-all ?
我正在尝试使用 clojure.core.logic 解决 Smullyan 的 To Mock a Mockingbird 中的第一个难题,不是因为它特别难,而是作为一种练习。谜题说有一个花园,有三种颜色的花:红色、黄色和蓝色。每种颜色至少出现一次,无论您采摘哪三朵花,其中都会有一朵红色和一朵黄色。问题:第三个一定是蓝色的吗?
逻辑代码的基本骨架非常简单:
counto
并containso
手动实现并做显而易见的事情。我是新手,所以我可能缺少现有的库支持。重要的一行是以 . 开头的那一行forall
。forall
基本上是我希望存在的,但似乎找不到。我知道的唯一可以放在这个地方的构造是fresh
。但fresh
本质上执行存在量化∃。我在这里想要的是全称量化∀。
我对可以选择包含红色和黄色的三朵花的花园不感兴趣。我对一个必然导致这种选择的花园感兴趣。