2024 Clojure状态调查中分享您的想法!

欢迎!请查看关于页面以了解更多关于如何操作的信息。

0
core.logic

通过注释逻辑变量并将在一个运行中嵌入另一个运行(通过传入当前的替换、在其上运行以及提取出重写值并将其统一回当前的替换)来完成此操作。

13 答案

0

评论者:abrooks

我正在努力理解 StackOverflow 问题的回答

http://stackoverflow.com/questions/7647758/prolog-findall-implementation

0

评论者:abrooks

讨论 — 初始工作补丁支持嵌套版本的 'run-a/'run-a**。符号绑定必须与现有的lvars相匹配,所有返回值的向量将与它们统一。

0

评论者:abrooks

我们应该提供模仿bagof、setof和findall的包裹器吗?

我对当前名称run-a/run-a**仍然没有信心。'a'实际上是一个内部实现细节。当我想到更好的名称时,我会提供修订后的补丁(有任何想法吗?)。

0

评论者:dnolen

是的,请吧。是的,我认为 run-a 等 名称不重要 - 目前只是实现细节,直到我们真正了解其影响并在其中使用。

0

评论者:abrooks

我在考虑简单地根据第一个参数将 {{run}}/ * 条件化,如果是用替换图作为第一个参数调用我们,则使用嵌套形式。

我对 {{bagof}} 和 {{findall}} 的当前理解让我认为它们不值得在嵌套 {{run}} 功能之外实现。

我还在考虑相当有用的 {{setof}},将需要基础设施的帮助以使其完全高效。

感恩节后我将提交一个新的补丁。

0

评论者:dnolen

非常感谢,太好了。

0

评论者:abrooks

我没有忘记,只是事务太多。

我有机会在圣诞节之前完成这项工作,否则,新年之后再说。

0

评论者:abrooks

在车祸之后,去了伦敦和摩洛哥旅行,工作堆积如山,并陷入了 core.logic 活动看起来非常繁忙的流水线(伟大的工作!)之中,我现在又回来了。

将补丁向前移植后,我在实现中发现了几个错误,并意识到这些问题突出显示了我对一些已创建的语义的粗心处理。

我现在相当确信,我们不应该用 {{run}} 或 * } 来命名它。在嵌套上下文中试图使其意味着相同的事情太多。

当前的机制仍然与 {{findall}}/{{bagof}}/{{setof}} 不完全匹配,所以我正在寻找一个好的配套。我会随着想法的涌现发布有意义的评论。

0

评论者:dnolen

很高兴听到你安然无恙!不用担心,你什么时候准备好,我就接受补丁。

0
by

评论者:abrooks

我已经切换到具有 bagof/setof 类型聚合和子查询的 Datomic(尽管切换并非具体为此),我不知道何时或者是否还会回到这个问题。抱歉!

0
by

评论者:dnolen

没关系的!很高兴 Datomic 对您来说效果不错 :)

0
by

评论者:gordongustafson

已经有一段时间了,但以下是一个关于实现 findall 的简短补丁,供大家查阅 :)

0
by
参考:https://clojure.atlassian.net/browse/LOGIC-68 (由dnolen提交)
...