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

clojure - Clojure:懒惰 + core.logic:无限循环

语境

以下代码无限循环:

问题:

这应该是正确的行为吗?(无限循环?)另一方面,代码如下:

需要 5 个元素并将它们打印出来。

0 投票
4 回答
3191 浏览

clojure - 康达, 康迪, 康德, 康杜

我正在阅读Reasoned Schemer

我对如何conde工作有一些直觉。

但是,我找不到///做什么的conde正式定义condaconducondi

我知道https://www.cs.indiana.edu/~webyrd/但这似乎有例子而不是定义。

某处有conde, conda, condi,的正式定义吗?condu

0 投票
2 回答
798 浏览

clojure - 使用 clojure 的 core.logic/core.match 解决 Dinesman 的多住宅示例

在观看了 Sussman 的讲座http://www.infoq.com/presentations/We-Really-Dont-Know-How-To-Compute后,我受到启发,尝试了一下 core.logic 和 core.match。我知道的唯一例子是我小时候做过的那些约束问题解决者。这是一个在 SICP 课程中使用的示例,并且在演讲中被提及:

贝克、库珀、弗莱彻、米勒和史密斯住在一栋只有五层楼的公寓的不同楼层。贝克不住在顶层。库珀不住在底层。弗莱彻既不住在顶层也不住在底层。米勒住在比库珀更高的楼层。史密斯不住在弗莱彻家附近的楼层。弗莱彻不住在库珀附近的楼层。每个人都住在哪里?

我在 Rosettacode 网站上找到了这个: http ://rosettacode.org/wiki/Dinesman%27s_multiple-dwelling_problem#PicoLisp

但不太清楚这如何转化为clojure。我希望有人可以提供使用 core.logic 或 core.match 解决此问题的示例

0 投票
3 回答
2978 浏览

clojure - 关系数据库语言和逻辑编程有多相似?

关系数据库语言和 clojuresql等逻辑编程语言在基本概念和实现方面有何异同?两者可以互换吗?prologcore.logic

0 投票
1 回答
481 浏览

clojure - 如何从 minikanren / clojure-core.logic 中的一组可能值中进行选择?

如何表达n变量从一组n值中取不同值的约束?

例如,也许我想搜索表单的表达式

具有最大值时,a、b 和 c 应为 1、2 和 3(按某种顺序),而 op1 和 op2 都可以是* + - / exp?

我可以看到如何a从(例如1 2 3通过使用)中获得价值。conde和 也是b如此c。但是那我如何排除平等呢?我是否需要遍历所有组合并明确排除它们?

显然我可以“手动”进行排除,但我想知道是否有更好(更有效)的方法,或者包含类似这样的东西的支持库(我对线性编程库有更多经验,通常他们有一堆解决这些常见情况的辅助函数)。

并将其推广到某些值可以出现一定次数的情况似乎会很麻烦......

现在我想一想,如何搜索最大值?有这方面的好书或笔记吗?!

[我正在使用 clojure,但我的理解是 clojure-core.logic 和 minikanren 几乎相同]

更新:任何阅读这个问题的人都在寻找一个好的介绍,请查看我在下面的评论中提到的Alvis 论文。

0 投票
1 回答
507 浏览

clojure - 将两个向量约束在同一个域中但不是彼此的成员

我使用 clojure 有一段时间了,但刚开始使用 core.logic。

给定一个域,1 2 3 4我想得到一个由两个向量组成的向量,比如([[1 2] [3 4]]).

注意:这只是我真正想做的简化版本。:) 见:https ://github.com/adamhoward/lineup

我在网上找到了非会员的定义:

我正在尝试像这样使用它:

在 Emacs 中运行它会给我一条Evaluation aborted.消息。

当我尝试退出时memberonot-membero我会回来([[1 2] [1 2]]),这对我来说很有意义。第一个向量中的每个元素[w x]都是第二个向量的成员[y z]

但是,当我打电话时,run 2我会回来([[1 2] [1 2]] [[1 2] [1 3]])。我不明白[[1 2] [1 3]]上述规则如何正确。我理解不everyg正确吗?任何指导(包括 rtfmanual、rtfbook、rtfdissertation)将不胜感激。

谢谢。

编辑:可能已经解决了这个问题。

仍然不确定来自membero但不是not-membero目标的奇怪结果,我发现我可以这样做:

[w x]conj'd to的每个元素都[y z]包含所有不同的值。这可能比非会员效率低,所以我仍然愿意接受任何帮助。

0 投票
1 回答
723 浏览

clojure - Clojure core.logic 中的阶乘

我想使用 core.logic 编写阶乘。我找到了这个序言片段

并尝试通过以下方式将其翻译为 core.logic

消息失败

在 core.logic 中编写阶乘的正确方法是什么?

0 投票
1 回答
806 浏览

clojure - 使用有限域声明降序/升序坐标的谓词

我想写一个谓词,destroy,它声明第一个给定坐标 [y, x] 下降到第二个给定坐标(想象左上角有 [0, 0] 的棋盘)。

Prolog 中的一个非常简单的实现可能如下所示:

我无法在 core.logic 中实现这一点。我已经尝试了很多不同的东西(==/=fd/conso/appendo 和+fd/+)。我尝试过的一件事:

他们中的大多数在像这样运行它们时什么都不返回:

我觉得在使用 core.logic 时在 Prolog 中想太多是不好的……任何提示都值得赞赏。提前致谢。

编辑:找到了一种解决方法,其中 descendo 保持不变,但是在运行它时我们不使用域:

我不确定是否domain要在向量上使用,所以这可能不是一种解决方法,而是实际的解决方案。

0 投票
1 回答
316 浏览

clojure - 使用 core.logic 列出唯一的 DAG 父级

这是一个(希望如此)简单的逻辑程序,我已经坚持了一段时间。

我有一个由 core.logic 中的边关系表示的 DAG,在生成父节点列表时,当我在图中有“菱形”时会得到重复(我不是在谈论循环)。

在这种情况下,有什么方法可以生成不同的父母列表(通过重写 parento 或类似方法)?

我想得到 (:b :c :a) 并且我想在 run* 语句中执行它(即将结果包装在一个集合中不是我的目标)。

此外,将“^:tabled”添加到 parento 似乎可以解决问题,但我不想要 tabled 引入的记忆。

0 投票
3 回答
2212 浏览

clojure - 如何使用 core.logic 求解数学方程

我尝试在 core.logic 中输入查询:

提示说,

如果我还没有完全误解什么是逻辑编程,有没有办法可以使用 core.logic 解决这个问题?