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

欢迎!有关如何使用本网站的信息,请参阅关于页面。

0
core.logic

这可以通过注释逻辑变量,通过传递当前替换并在其中运行来在运行中嵌入运行,提取重新实例化的值并将其统一回当前替换来完成。

13 答案

0

评论由:abrooks 发布

我正在努力理解 StackOverflow 中此问题给出的答案

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

0

评论由:abrooks 发布

为了讨论 - 支持嵌套版本 'run-a/'的初始已工作补丁。绑定的符号必须匹配现有的 lvars,这样返回的所有值的向量将进行统一。

0

评论由:abrooks 发布

我们应该提供模拟 bagof, setof 和 findall 的包装器吗?

我对当前的名称 run-a/run-a** 还不太满意。“a” 实际上是一个内部实现细节。当我想到更好的名字时,会提供一个经过修订的补丁(有什么想法吗?)。

0

评论者:dnolen

是的,请。我认为运行-a等的名称并不重要 - 除非我们真正理解其影响并开始使用,否则它们只是目前的实现细节。

0

评论由:abrooks 发布

我考虑将{{run}}/ *做成基于第一个参数的条件化,如果第一个参数是替换映射,则使用嵌套形式。

我对{{bagof}}和{{findall}}的理解让我认为它们不值得实现,除非我们有嵌套的{{run}}功能。

我还在考虑{{setof}},这很有用,并将需要基础设施的帮助才能完全高效。

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

0

评论者:dnolen

太好了,非常感谢。

0

评论由:abrooks 发布

我没有忘记,我只是最近太忙了。

我可能在大约圣诞节前抽空解决这个问题,否则可能在新年之后。

0

评论由:abrooks 发布

发生车祸、前往伦敦和摩洛哥旅行、工作上的忙碌以及看核心的逻辑活动(工作得很棒!),我现在又回到了这个问题。

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

我现在相当确信我们不想将它命名为{{run}}或* }。在嵌套上下文中尝试使其具有相同的含义将是一个非常重的负担。

当前的机制与{{findall}}/{{bagof}}/{{setof}}仍不完全相符,所以我正在寻找最佳的匹配方式。当我有所思考时,我会发布有意义的评论以供审查。

0

评论者:dnolen

很高兴听到您一切安好!不要担心,您只要准备好了补丁,我会立即修改。

0

评论由:abrooks 发布

我已经切换到Datomic(虽然切换的原因不是这些),它有 bagof/setof 类型聚合和子查询功能,但我不知道何时或是否会回过头来处理这个问题。对不起!

0

评论者:dnolen

不要担心!很高兴Datomic能解决您的问题 :)

0

评论者:gordongustafson

已经过了很长时间,但这里有一份简短的补丁,实现了 findall,如果有人想审查的话。 :)

0
参考: https://clojure.atlassian.net/browse/LOGIC-68(由dnolen报告)
...