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

是的,请。我认为运行-a等的名称现在并不关键 - 在真正了解其影响并得到一些使用之前,这只是实现细节。

0

由:abrooks评论

我正在考虑使{{run}}/ * 根据第一个参数进行条件化,如果我们将替换映射作为第一个参数调用,则使用嵌套形式。

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

我仍在考虑{{setof}},这很实用,而且将需要基础设施的帮助才能充分高效。

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

0

评论人:dnolen

太好了,非常感谢。

0

由:abrooks评论

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

我有很小机会在圣诞节前完成这项工作,否则,可能要等到新年之后了。

0

由:abrooks评论

在遭遇车祸、旅行到伦敦和摩洛哥、工作忙碌以及关注显然非常繁忙的core.logic活动(工作做得很好!)之后,我现在又回到这个问题上。

在将补丁移植到前方并且发现一些问题后,我意识到这些问题突显了我对创建的一些语义的理解草率。

我现在相当确信我们不想将这个名字命名为{{run}}或* }。在嵌套上下文中试图让它意味着同样的东西是一项很大的压力。

当前的机制仍然与{{findall}}/{{bagof}}/{{setof}}不完全匹配,因此我正在寻找一个良好的匹配。我会在我有有意义的思想时列出。

0

评论人:dnolen

很高兴听到你没事!不用担心,你什么时候准备好补丁就来。

0

由:abrooks评论

我已经切换到 Datomic,它具有 bagof/setof 类型聚合和子查询(尽管切换并非针对这些 specifically),我不知道我是否或何时会回来。抱歉!

0

评论人:dnolen

不用担心!很高兴 Datomic 对你很有用 :)

0

评论者:gordongustafson

已经过去一段时间了,这是一个非常短的补丁,用于实现 findall,如果有人想审查的话。 :)

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