问题标签 [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.

0 投票
2 回答
705 浏览

prolog - Prolog 匹配 vs miniKanren 统一

在 Prolog - 人工智能编程中,Bratko 在第 58 页说了以下内容。

“Prolog 中的匹配对应于所谓的逻辑统一。但是,我们避免使用统一这个词,因为在大多数 Prolog 系统中出于效率原因,匹配的实现方式并不完全对应于统一。正确的统一需要这样-称为发生检查:给定变量是否出现在给定术语中?发生检查会使匹配效率低下。

我的问题是 miniKanren 中的统一是否会遭受这种效率损失,或者这个问题是如何解决的?

0 投票
1 回答
187 浏览

clojure - 在实践中,非关系对 core.logic 意味着什么?

当试图通过 API 文档理解 core.logic 时,我遇到了非关系目标和关系目标。我不知道这在实践中意味着什么,以及为什么注释目标是否是相关的很重要。

您能否举例说明如何根据目标是否相关来以不同方式使用目标?

0 投票
0 回答
137 浏览

python - 用 minikanren 检测重婚

我正在使用 minikanren 的 LogPy 实现。

我有一些关于婚姻的事实。

我可以通过“用户级”运行功能找到某人的妻子

但是调用run使我脱离了逻辑编程世界,所以它是不可逆的。

尽管如此,我认为我可以通过以下方式检测重婚者:

但是(~_105,)每次运行它时都会输出类似数字变化的东西。这不是“鲍勃”。

在 Prolog 中,我相信执行此操作的关键工具是findall/bagof/setoff

我在 minikanren 中看到了一些关于这些的猜测,但没有具体的。

0 投票
1 回答
113 浏览

prolog - 我应该如何处理逻辑编程中的重复更新?

特别是我试图确定解决以下类型问题的最佳方法:

我感兴趣的示例是 Mitchell 的机器学习书中的 find-s 算法,它被应用于 4 个训练示例。

基本思想是对于每个训练示例 x 和假设 h,确定 h' 是否包含 x,使其更通用。对于训练集中的每个 x,我需要将 h 映射到 h'。我遇到的问题是如何用逻辑编程语言最好地解决这个问题。我正在使用 minikanren,它大致是嵌入在方案中的序言。

在计算每个 h' 之后,我需要设置!它到一个全局变量 h,然后继续下一个训练示例 x。下面的代码是程序的主要部分。

h 是全局变量,seto 使用 find-s 算法 (find-so) 从 h0 和 x 训练示例中计算的下一个假设 h1 对 h 进行变异。

在序言中,它(我认为)相当于assert('hypothesis'(H))在每个训练示例 X 之后(覆盖前一个)并在所有训练示例之后调用retract('hypothesis'(H))应用。

我的问题是,这是否是解决此类问题的最佳方法(通过副作用)?

编辑:我接受了@mat 的回答和他的评论。总之,我需要将训练示例视为一个列表,并在该列表上使用前向递归,直到我到达空列表。如果我陷入困境,就是将训练示例作为回溯的一部分,同时寻找下一个假设,而不是将它们放在我可以重复到空的列表中。

0 投票
1 回答
373 浏览

clojure - clojure 的 core.logic 使用什么算法来解决?

根据维基百科,序言使用SLD Resolution。在 core.logic 中驱动求解的主要算法是什么?

0 投票
0 回答
178 浏览

f# - miniKanren F# with FSLogic

好吧,我正在关注miniKanrenin schemeusing的教程FsLogic,但我只是陷入了这个例子

我是f#这样写的:

但它失败了(不编译):( 在此处输入图像描述

阅读我尝试使用的测试,project但它也不起作用(我还不确定项目是做什么的).....

我正在从主页关注这个“uncourses”minikanren

0 投票
2 回答
765 浏览

clojure - MiniKanren 有“not”运算符吗?

MiniKanren 有“not”运算符吗?

例如,如何表示 Prolog 的

a如果b为真c且不为真则为真(Prolog 使用否定作为失败, not(c)如果c无法证明则认为已证明)

Prolognot也适用于非地面表达式,例如

0 投票
1 回答
227 浏览

logic-programming - 不理解 The Reasoned Schemer 第 5 章 62

我目前正在通过学​​习 The Reasoned Schemer 来学习 miniKanren。

我被困在第 5 章第 62 帧的练习中:(run* (x) (flatten_o (a) x))为什么输出中有三个列表?

0 投票
1 回答
111 浏览

clojure - 为什么 sorto 的这个实现不会终止?

我是逻辑编程的初学者。

我正在尝试实现这样的排序关系:

(sorto [3 2 1][1 2 3]) -> #s

我正在使用 clojure 和 core.logic:

我不明白为什么在大多数情况下这不能终止。

任何想法都会有所帮助,谢谢。

首先我定义了几个小帮手:

一个简单的计数关系:(counto [a b] 2) -> #s

减少和每一个?关系等价物:

最小关系:(mino 1 2 1) -> #s

列表与其最小元素之间的关系:(mino* [1 2 3 0] 0) -> #s

主要关系:(sorto [2 3 1 4] [1 2 3 4]) -> #s

以下运行不会终止,我想了解原因。

0 投票
1 回答
132 浏览

prolog - 正确使用逻辑语言作为工具

我对编程中的“为工作使用正确的工具”理念感兴趣,并且我有一个问题,我认为可以通过逻辑编程来解决。我的意思是幼稚的,因为我没有做过任何逻辑编程,只是开始学习。但是在我仍然试图掌握概念和词汇的阶段,我希望在可能变得太深之前获得一些专家指导。

吸引我使用逻辑编程的想法是我对“统一”概念的模糊了解,但我的想法是以一种我不确定是惯用的还是正确的方式使用它。给定两个对象(或树),我想通过它们的属性(或叶子)比较两者的相等性,我想返回的是一些“差异”的概念——即,给定这两个对象的方式没有什么不同,为了使两者成为某种平等的概念,必须对其中一个进行哪些更改?

例如,假设我有两个对象chairstool. 假设每个都由一个属性或属性列表组成,我想构建一个系统,该系统可以返回类似于“如果凳子legCount过去4hasBack过去,椅子和凳子将相等true”的内容。

出于某种原因,从语义上讲,我将其想象为一种余数,例如,chairstool等于一leg。不确定这是否有帮助...

我可以想到一些使用命令式代码的愚蠢方法以及使用函数式技术的一些更优雅的方法,但我有一种预感,逻辑编程可能特别适合这种情况。任何关于研究方向的智慧将不胜感激,谢谢!