问题标签 [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 回答
359 浏览

clojure - core.logic 中的 distincto 与 fd/distinct

fd/distinct在元素位于有限域而不是 的情况下使用有什么好处distincto

以下全部返回([0 1] [1 0])

值得注意的是,虽然看起来你可以distincto在任何你可以使用的地方使用(但不是相反),但对于和fd/distinct却不能这样说。memberofd/in

0 投票
1 回答
180 浏览

clojure - 用 core.logic 重构

我已经开始学习 core.logic,我完全迷路了。我正在尝试编写一个 core.logic 关系来重构表达式,重命名符号。我想要一个为给定表达式、符号列表和符号列表返回的关系来重命名这些符号:

具有所有符号的表达式从成为对应的一个到:

返回(defn multiply [a b] (* a b))

但它需要知道范围,

所以(rename '(defn q [x] ((fn [x] (* x 5)) x)) [x] [a])

会回来(defn q [a] ((fn [x] (* x 5)) a))

我不知道从哪里开始解决这个问题 - 任何提示将不胜感激!

0 投票
2 回答
1033 浏览

clojure - 您如何在更大的 Clojure 程序中以实用的方式使用 core.logic?

我很难理解如何混合 clojure 和 core.logic。

例如说我有以下问题:

我有一个带有附加分数的键值对列表:

我还有一张地图:

我想做的是根据根据地图评估的分数列表返回分数列表。

使用核心逻辑我可以做这样的事情:

我得到了预期的结果:

我的问题是我不知道如何把它变成我可以在更大的程序中动态运行的东西。这意味着我将在不同的时间应用不同的地图和不同的约束。我想我可以通过编写一个接受地图并输出约束的函数来创建 conde 的参数,但是我如何让 run* 在一组临时事实的上下文中进行评估?

我当然可以编写一个函数来返回我想要的没有 core.logic 的东西,但这似乎不太优雅。也许我在叫错树(我对 Clojure 和 core.logic 都是新手),这根本不是一个约束问题。

所以我的问题是:

当您从直到运行时才知道的来源中提取事实和约束时,您如何混合核心逻辑?

与此相关的是,您如何在一个新的事实环境中评估一组约束的环境中这样做?

0 投票
1 回答
186 浏览

clojure - 将 core.logic 扩展到自定义类型

我正在试验core.logic,并希望使我自己的自定义数据类型能够参与逻辑表达式:

基本上,这表示数学表达式树中的一个节点,包含一个节点树和一组使用的未绑定变量。node是常量、符号或(Operator Expression Expression....)树节点。我希望能够使用 core.logic 来操作数学表达式,并匹配此类表达式的子树。

如果可能的话,我该怎么做?

我从 core.logic 源代码中看到,有许多协议看起来可以很好地扩展(例如IUnifyTermsIReifyTerms等等),但并不完全清楚这些协议是如何使用的,以及哪些是我真正的需要延长。

0 投票
2 回答
271 浏览

clojure - Clojure core.logic 的意外结果(使用 CLP/FD)

我试图理解为什么以下product-pluso函数会返回意外结果。我发现了一个错误还是我误解了它是如何工作的?我正在将 core.logic 与 CLP/FD 一起使用。我还在学习,所以我可能做错了。该函数应采用两个因素,一个数字和一个总和。总和应该是因子加数字的乘积。效果很好,除非这两个因素都是新鲜的。然后我得到奇怪的结果。这发生在 core.logic v0.8.2 中。

0 投票
1 回答
134 浏览

clojure - 在 core.logic 中,两个方向的投影算作关系吗?

我知道project在 core.logic 中是不相关的。

但是,似乎我可以通过在内部的两个方向投影来获得类似关系的行为conda,例如:

这算作关系操作吗?还是缺少其他东西使这种非关系性?

0 投票
1 回答
523 浏览

clojure - 使用 core.logic 解决和积之谜

因此,我一直在尝试自学 clojure 和 core.logic,并决定尝试实现求和积问题的解决方案(http://en.wikipedia.org/wiki/Impossible_Puzzle)。

到目前为止,我已经实现了前两个步骤。

当域被限制为(解决方案)中的单个数字时,这似乎给出了正确的答案,但是如果我扩展该域,它会立即停止工作。

搜索单个成员域时的结果也包含多次答案。这似乎是由 inscruitable-summands 的每次递归引起的,但我不太确定为什么。

最后,我希望有人可以快速查看我的非唯一因素函数。感觉有点麻烦,我想知道是否有人可以提出更好的选择?

谢谢你的帮助,院长

0 投票
3 回答
755 浏览

clojure - 如何在 core.logic 中解构地图?

我相信我在解构 core.logic 中的地图时遇到了麻烦。我有以下代码:

它返回空列表(),表明它没有找到匹配项。我相信这是代码的 (== {:rank a} v) 部分的问题。我试图简单地返回 q,其中 q 是按 :rank 降序排列的地图向量。

0 投票
1 回答
279 浏览

clojure - How to implement a type system with clojure core.logic

I read in the interview with Rich Hickey that he would be interested in "using logic systems in place of a type system for Clojure". I also bumped into this statement in a SO answer, https://stackoverflow.com/a/6324228/380587 I can't see how logic and type system are related.

0 投票
1 回答
495 浏览

clojure - Clojure core.logic CLP(FD) 投影 FD 变量

我正在使用 Clojure 的 core.logic CLP(FD) 库(core.logic 版本 0.8.3)研究一个简单的平方打包算法。

正方形表示如下:

每个正方形表示为其左上角和右下角的坐标。

坐标是 FD 变量,在一定的区间内。

我想将解决方案的大小分别定义为距原点最近和最远的正方形的右上角和右下角之间的距离

这似乎适用于普通整数:

即使是完全约束的 FD 变量

但是,当变量的域没有受到完全约束时,它似乎会中断。例如,如果我删除 , 的约束y21 = 1并且y11y21其域中留下多个值:

我明白了

似乎project只有当它们的域受到完全约束时才适用于 FD 变量。这是应该的吗?如果是,是否有人对如何对 FD 变量进行非关系算术有任何建议?

谢谢!