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

评论者:abrooks

我已经切换到支持 bagof/setof 类型聚合和子查询的 Datomic(尽管切换并不是为了这些特定的需求),不知道我是否或何时会回头处理这个问题。抱歉!

0

评论由:dnolen 发布

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

0

评论者:gordongustafson

虽然时间过去了很久,但这里有一个短的补丁来实现 findall,如果有人想审查的话。 :)

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