问题标签 [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 语句
我正在尝试通过“填空”动态构建 core.logic 语句。这是一个简单的例子:
但是我得到一个clojure.lang.Compiler$CompilerException: java.lang.RuntimeException: No such var: user/q, compiling:(null:20:12)
.
我已经尝试了引用、取消引用和取消引用拼接的所有组合,但我无法弄清楚。我应该如何插入q
?
(而且,退后一步,建立这样的陈述是正确的方式吗?)
clojure - 使用 clojure 的 core.logic / minikanren 查找相似的集合
这是我关于 Stack Overflow 的第一个问题。
我是逻辑编程的新手,正在尝试评估它是否可以用来解决我正在处理的一些匹配问题。
问题:
假设我们有一个看起来像这样的集合 A。
然后我们还有一些看起来像这样的其他集合。
我要解决的问题是,
“找到与我们所知的其他集合相比,与集合 A 共享最多成员的集合。”
这种情况下的答案应该是集合 D,因为它与集合 A 共享三个成员。与仅与 A 共享两个和一个成员的其他集合相比。
问题一:
逻辑编程能解决这类问题吗?
问题2:
如果可以,您将如何在例如 Clojure 的 core.logic 中做到这一点?
clojure - 带有 ClojureScript 的 core.logic CLP(FD)
我试图用来core.logic
找出以下等式的答案:
W
和V
都是给定的,而x
和y
是我要计算的值。
我试过这样的方法(我W
用 60 和V
10 代替):
但它会返回(["10<lvar:y_6>" NaN])
(我希望是 35 和 25)。
我该如何处理?我不想使用clojure.core.logic.fd
,因为我正在使用 ClojureScript - 这可能吗?有可能fd
吗?
请注意,这些等式只是一个示例。在我的真实场景中,我想解决更多类似的问题:
现在我简化了那些以获得最基本的示例运行,但也欢迎上述解决方案:)
clojure - 为什么会返回这个矛盾的 clojure.core.logic/featurec 结果?
...我该如何避免呢?
返回
我理解这意味着_0
地图必须至少包含:a 1
键值对和:a 2
键值对。这似乎是矛盾的,因为:a
不能同时映射到两者1
,2
除非我们使用 MultiMaps。我不能把它读成:a 1
OR :a 2
,因为我指定的约束是一个连词。我原以为结果应该是()
因为约束是矛盾的;没有任何价值q
可以满足这些约束。
我一定是读错了结果。
prolog - Prolog 匹配 vs miniKanren 统一
在 Prolog - 人工智能编程中,Bratko 在第 58 页说了以下内容。
“Prolog 中的匹配对应于所谓的逻辑统一。但是,我们避免使用统一这个词,因为在大多数 Prolog 系统中出于效率原因,匹配的实现方式并不完全对应于统一。正确的统一需要这样-称为发生检查:给定变量是否出现在给定术语中?发生检查会使匹配效率低下。
我的问题是 miniKanren 中的统一是否会遭受这种效率损失,或者这个问题是如何解决的?
clojure - 在实践中,非关系对 core.logic 意味着什么?
当试图通过 API 文档理解 core.logic 时,我遇到了非关系目标和关系目标。我不知道这在实践中意味着什么,以及为什么注释目标是否是相关的很重要。
您能否举例说明如何根据目标是否相关来以不同方式使用目标?
clojure - 如何在 Push、Clojush、Clojure 中实现任何基因蚂蚁寻找食物?
我正在尝试使用 Push、Clojush、Clojure 来实现蚂蚁在 2d 地图中寻找食物,但我不确定如何表示地图?有人可以给我一个例子吗?谢谢你。
clojure - 如何从 Clojure core.logic 中的 [[:a :A] [:b :B] [:c :C]] 中删除 [:b (lvar)]?
我想[:b :B]
从[[:a :A] [:b :B] [:c :C]]
以下示例代码中删除,如果我替换:B
为(lvar)
,它不再起作用:
这些工作:
这些不(注意lvar
):
clojure - Clojure core.logic 找到满足所有谓词的所有成员?
我在 Clojure 中有以下代码(使用 core.logic):
我想要的是找到所有孩子都上同一所学校的所有父母。所以,在上面的列表中,我的预期回报是('Bernard)
,因为他的两个女儿去“school2”,每个其他父母至少有一个孩子不会去其他人的同一所学校。
这对 core.logic 可行吗?如果是这样,我该怎么做?
clojure - 使用 core.logic 做一个简单的匹配函数
假设我们matches
通过下表定义一个关系:
这意味着(在伪代码中)
在 core.logic 中,我想我会知道如何制作可以近似于以下行为的个性化函数matches
:
...等等对于matches-B
和matches-C
。
问题:我如何概括,即,如上所述matches-A
的单个函数?matches
特别是,我有兴趣制作它,以便您可以运行类似(matches "not A")
,(matches "B and C")
和(matches "C or D")
(在伪代码中)的查询来分别获得类似(A D)
,(A)
和的结果(A B)
。这可能吗?
注意:我使用的是 clojurescript 而不是 clojure。我不确定这是否会影响答案。