问题标签 [reasoned-schemer]

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 投票
4 回答
3191 浏览

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

我正在阅读Reasoned Schemer

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

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

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

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

0 投票
1 回答
469 浏览

clojure - Clojure.logic 与 The Reasoned Schemer 的区别

我一直在使用 Clojure.logic 完成The Reasoned Schemer (TRS),并注意此处记录的差异。我到达第 3 章的第 24 帧,TRS 报告说

应该产生

现在,我实现了`lolo as

这会产生以下奇怪的结果:

这基本上意味着我的 lolo 正在产生泄漏出新变量的解决方案。如果我继续前进,试图看到一个模式,我会得到

但我在雾中看不清楚,我希望能对此有所了解。这是我lolo的一个错误吗?它是 clojure.logic 中的错误吗?TRS 中的求解器和 clojure.logic 中的求解器之间存在合理的区别吗?我如何解释或使用结果?我如何在心理上预测 clojure.logic 的结果?

0 投票
1 回答
402 浏览

scheme - 为什么“The Reasoned Schemer”在其函数末尾添加一个“o”?

在推理的方案中,他们命名标准 lisp 函数的末尾带有一个“o”,例如consoand appendo

我的问题是:为什么“The Reasoned Schemer”会在其函数末尾添加一个“o”?

0 投票
2 回答
228 浏览

logic - 理性的计划者:不理解练习 57

在练习(或条目?)57 中,我只是不明白逻辑是如何流动的。问题是:给定

其中 '=' 实际上是三连杆统一 (?) 运算符。运行以下:

书中给出了答案:

我原以为答案是:

我的理由是 (teacupo x) 中的“x”应该首先通过其所有解决方案,并统一到其所有解决方案的列表中。但似乎teacupo 一次只放弃了一种解决方案。它让我感到困惑,因为我对 conde 的解释是,使用它给出的规则,你应该遍历 conde 的行,在一行成功后,假装它失败,刷新变量并找到下一行成功。鉴于解决方案的工作方式,该代码中的 conde 似乎回到了成功的行,然后迫使 teacupo conde 失败并放弃下一个可能的值。再一次,我会认为 teacupo 解决方案会放弃列表中的所有 conde 解决方案,然后继续进行外部 conde 调用。

0 投票
1 回答
227 浏览

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

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

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

0 投票
4 回答
527 浏览

scheme - Racket 博士支持 MiniKanren

我从《The Reasoned Schemer - 第二版》一书和 DrRacket 方案环境开始研究 miniKanren。

我安装了“faster-minikanren”包,但是本书的第一个示例使用命令run*(例如,(run* q #f))会产生错误消息,例如run*: bad syntax in: (run* q #f).

这是否意味着“faster-minikanren”包没有提供 minikanren 的正确定义?还是我犯了一个错误?

0 投票
1 回答
87 浏览

scheme - 如何在 The Reasoned Schemer 中解释 run 5 (x) g0 g1

我不明白 run n (x) g0 g1 ... 如何通过 listo

listo 是这样定义的

第 29 页第 14 节中的推理计划者说代码

产生结果

你能解释一下这是怎么发生的吗?先感谢您。

0 投票
3 回答
192 浏览

scheme - miniKanren:如何定义#s和#u?

在 miniKanren 中,succeed可以定义为(define succeed (== #t #t)),并且fail可以定义为(define fail (=== #t #f))。但是,和在The Reasoned Schemer中出现的#sand#u的简写形式succeed又如何呢?fail

(define #s succeed)在球拍中产生错误:

我觉得这与阅读器宏有关。

如何在 Scheme 和 Racket 中定义#sforsucceed#ufor ?fail

我正在使用Scheme规范 miniKanren 实现和 Racket的规范 miniKanren 实现。

0 投票
1 回答
330 浏览

clojure-core.logic - “事实数据库”不是迷你看人的核心功能吗?

我一直在玩 miniKanren,试图通过将非常基本的 Prolog 教程转换为它来理解它。

我习惯使用 Python,所以我从 LogPy 库开始,该库后来被分叉并改进为实际上称为miniKanren的库

从 lib 的 README 中给出的示例中,我们可以看到:

这与您在 Prolog 教程开始时可能会看到的内容相对应,例如:

我对此很满意。后来我发现自己阅读了越来越多的 MiniKanren 文献(一般意义上,不是 Python 库),我意识到我没有看到任何以这种方式使用事实数据库的示例,或者提到一个。

我错过了吗?或者这实际上不是 MiniKanren 的“A Reasoned Schemer”的一个特点?

我确实在 Clojurecore.logic实现中找到了这样的东西,其中有: https ://github.com/clojure/core.logic/wiki/Features#simple-in-memory-database

它以非常相似的方式工作,尽管比 python 更好,因为 db 是一个独特的实体,而不是 lib 中的全局变量。

python lib是否只是借用了一个非kanren的想法core.logic?还有其他类似的 MiniKanren 实现吗?还是完全不同的方法?

0 投票
2 回答
209 浏览

scheme - 阐明不同 minikanren 实现中的搜索算法

我目前正在通过 The Reasoned Schemer 和 Racket 学习 miniKanren。

我有三个版本的 minikanren 实现:

  1. The Reasoned Schemer,第一版(麻省理工学院出版社,2005 年)。我叫它TRS1

    https://github.com/miniKanren/TheReasonedSchemer

    PS。它说它condi已被conde执行交织的改进版本所取代。

  2. The Reasoned Schemer,第二版(麻省理工学院出版社,2018 年)。我叫它TRS2

    https://github.com/TheReasonedSchemer2ndEd/CodeFromTheReasonedSchemer2ndEd

  3. The Reasoned Schemer,第一版(麻省理工学院出版社,2005 年)。我叫它TRS1*

    https://docs.racket-lang.org/minikanren/

我对上面的三种实现做了一些实验:

第一个实验:

TRS1

TRS2

TRS1*

请注意,在第一个实验中,TRS1产生TRS2了相同的结果,但TRS1*产生了不同的结果。

似乎condeTRS1TRS2使用相同的搜索算法,但TRS1*使用不同的算法。

实验二:

TRS1

TRS2

TRS1*

请注意,在第二个实验中,TRS2产生TRS1*了相同的结果,但TRS1产生了不同的结果。

似乎conde inTRS2TRS1*使用相同的搜索算法,但是TRS1使用了不同的算法。

这些让我很困惑。

有人可以帮我在上面的每个 minikanren 实现中澄清这些不同的搜索算法吗?

很感谢。

---- 添加一个新的实验 ----

第三次实验:

TRS1

但是,run 2还是run 3循环。

如果我使用condi而不是conde, 那么run 2可以工作但run 3仍然循环。

TRS2

这没关系,只是顺序不符合预期。

请注意,(a c)现在是最后。

TR1*

但是,run 3循环。