问题标签 [minikanren]
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.
functional-programming - 逻辑编程的最佳用途是什么?
我所说的逻辑编程是指声明性编程语言的一个子范式。不要将此问题与“您可以使用 if-then-else 解决什么问题?”混淆。
像 Prolog 这样的语言非常吸引人,值得为了学习而学习,但我不得不想知道什么样的现实世界问题最好用这种语言来表达和解决。有更好的语言吗?逻辑编程是否存在于更流行的编程语言中?答案的愤世嫉俗的版本是Python Paradox的变体吗?
clojure - mini-kanren cond-a cond-u 和 cond-e 有什么区别?
我曾尝试在 clojure 中使用 mini-kanren 的实现。但是一直在努力理解 cond-a cond-u 和 cond-e 之间的区别。我似乎对 cond-e 很清楚,但对 cond-a 和 cond-u 的理解却很糟糕。
cond-e 采用一组目标,然后尝试每个目标......即尝试所有成功的分支。
相反, cond-a 和 cond-u 提交到第一个谓词成功的分支,然后 cond-a 返回所有可能的成功统一。而 cond-u 只返回第一个成功的统一......但是当我使用它时,这种理解似乎是不正确的。有人可以帮助我澄清这种理解。
clojure - 如何在 core.logic 中模拟“外部连接”?
我刚刚开始使用 core.logic,为了解决这个问题,我正在尝试实现一些简单的东西,类似于我目前正在专业处理的问题。然而,问题的一部分让我难住了......
作为我的示例的简化,如果我有一个项目目录,其中一些仅在某些国家/地区可用,而有些在特定国家/地区不可用。我希望能够指定项目列表和例外情况,例如:
如果可能的话,我宁愿不为所有国家/地区指定允许进入,因为有限制的项目集相对较小,我希望能够进行一次更改以允许/排除给定项目的项目国家。
如何编写一个规则,给出一个国家/地区的项目/颜色列表,并具有以下约束:
- 该项目必须在项目列表中
- 国家/项目不得在“不允许进入”列表中
- 任何一个:
- 该项目的限制列表中没有国家
- 国家/项目对在限制列表中
有没有办法做到这一点?我是否以完全错误的方式思考事情?
clojure - 为什么 miniKanren 的名字总是以 `o` 结尾?
所有 miniKanren 关系都以字母结尾o
。这样做的动机是什么?我看到 Clojure core.logic 库也这样做。
clojure - 了解 Mini-Kanren 的执行模型
SICP 的第 5 章解释了寄存器机器的元循环评估器实习生方案。
就 Scheme 原语而言,有什么可以提供类似类型的 Mini-Kanren 的吗?
我知道有一篇关于 Mini-Kanren 的论文(但是,我只关心建立一个心智模型;而不是所有血淋淋的优化细节)。我也知道有理性的计划者-但是,我不是在寻找一堆示例-我只是想以非常非常基本的形式理解 Mini-kanren,就像人们如何通过以下方式理解方案一样理解:eval、apply、if、set!、env
谢谢!
clojure - Core.logic的简明解释
我想使用 Clojure 的 Core.logic。但是,我也想了解它是如何工作的。在某处是否有简明的解释?(比如实现一个元循环评估器?)
谢谢!
clojure - mini-Kanren,core.logic,clojure:推理方案练习60
这不是家庭作业——解决方案已经在文本中。我只是无法理解解决方案。
问题
正确的解决方案
我相信的解决方案
我的困惑
显然“a (== true q)”行没有被执行,因为只有 b 是目标。这让我很困惑。到目前为止,我的逻辑编程心智模型是:
- 考虑对 q 的所有可能分配
输出设法通过整个程序的那些
因此,“a (== true q)”强制 q = true,这使得不可能满足“b (== false q)”行。
然而,显然只执行“计算目标所需的事情”。这是怎么回事?core.logic / mini-kanren 的正确心理执行模型是什么?
谢谢
(顺便说一句,我显然错了,因为 mini-karen + core.logic 彼此一致——我只是想了解我做错了什么。)
clojure - 康达, 康迪, 康德, 康杜
我正在阅读Reasoned Schemer。
我对如何conde
工作有一些直觉。
但是,我找不到///做什么的conde
正式定义conda
。condu
condi
我知道https://www.cs.indiana.edu/~webyrd/但这似乎有例子而不是定义。
某处有conde
, conda
, condi
,的正式定义吗?condu
clojure - core.logic 占主导地位的竞技场 [软]
社区维基
我不在乎声望点,我只想要好的答案。随时将此问题标记为社区 wiki。
语境
我一直在通过 The Reasoned Schemer 工作,并发现了以下观察结果:
- 逻辑编程非常有趣。
- 逻辑编程有时是违反直觉的
逻辑编程通常是“低效的”(或者至少是我编写的代码)。
好像从
- 汇编 -> C++,我“放弃”了编写自己的机器代码的控制权
- C++ -> Clojure,我放弃了对内存管理的控制
- Clojure -> core.logic/prolog/minikanren,我失去了对如何完成计算的部分控制
问题:
除了(1)解决逻辑难题和(2)类型推理之外,逻辑编程主导的问题领域是什么?
谢谢!
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 论文。