问题标签 [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 - Clojure:懒惰 + core.logic:无限循环
语境
以下代码无限循环:
问题:
这应该是正确的行为吗?(无限循环?)另一方面,代码如下:
需要 5 个元素并将它们打印出来。
clojure - 康达, 康迪, 康德, 康杜
我正在阅读Reasoned Schemer。
我对如何conde
工作有一些直觉。
但是,我找不到///做什么的conde
正式定义conda
。condu
condi
我知道https://www.cs.indiana.edu/~webyrd/但这似乎有例子而不是定义。
某处有conde
, conda
, condi
,的正式定义吗?condu
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 解决此问题的示例
clojure - 关系数据库语言和逻辑编程有多相似?
关系数据库语言和 clojuresql
等逻辑编程语言在基本概念和实现方面有何异同?两者可以互换吗?prolog
core.logic
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 论文。
clojure - 将两个向量约束在同一个域中但不是彼此的成员
我使用 clojure 有一段时间了,但刚开始使用 core.logic。
给定一个域,1 2 3 4
我想得到一个由两个向量组成的向量,比如([[1 2] [3 4]])
.
注意:这只是我真正想做的简化版本。:) 见:https ://github.com/adamhoward/lineup
我在网上找到了非会员的定义:
我正在尝试像这样使用它:
在 Emacs 中运行它会给我一条Evaluation aborted.
消息。
当我尝试退出时membero
,not-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]
包含所有不同的值。这可能比非会员效率低,所以我仍然愿意接受任何帮助。
clojure - Clojure core.logic 中的阶乘
我想使用 core.logic 编写阶乘。我找到了这个序言片段
并尝试通过以下方式将其翻译为 core.logic
消息失败
在 core.logic 中编写阶乘的正确方法是什么?
clojure - 使用有限域声明降序/升序坐标的谓词
我想写一个谓词,destroy,它声明第一个给定坐标 [y, x] 下降到第二个给定坐标(想象左上角有 [0, 0] 的棋盘)。
Prolog 中的一个非常简单的实现可能如下所示:
我无法在 core.logic 中实现这一点。我已经尝试了很多不同的东西(==/=fd/conso/appendo 和+fd/+)。我尝试过的一件事:
他们中的大多数在像这样运行它们时什么都不返回:
我觉得在使用 core.logic 时在 Prolog 中想太多是不好的……任何提示都值得赞赏。提前致谢。
编辑:找到了一种解决方法,其中 descendo 保持不变,但是在运行它时我们不使用域:
我不确定是否domain
要在向量上使用,所以这可能不是一种解决方法,而是实际的解决方案。
clojure - 使用 core.logic 列出唯一的 DAG 父级
这是一个(希望如此)简单的逻辑程序,我已经坚持了一段时间。
我有一个由 core.logic 中的边关系表示的 DAG,在生成父节点列表时,当我在图中有“菱形”时会得到重复(我不是在谈论循环)。
在这种情况下,有什么方法可以生成不同的父母列表(通过重写 parento 或类似方法)?
我想得到 (:b :c :a) 并且我想在 run* 语句中执行它(即将结果包装在一个集合中不是我的目标)。
此外,将“^:tabled”添加到 parento 似乎可以解决问题,但我不想要 tabled 引入的记忆。
clojure - 如何使用 core.logic 求解数学方程
我尝试在 core.logic 中输入查询:
提示说,
如果我还没有完全误解什么是逻辑编程,有没有办法可以使用 core.logic 解决这个问题?