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

我已经切换到使用 Datomic,它拥有 bagof/setof 类型聚合和子查询功能(尽管切换并非为此特定目的),我不知道何时才能回到这个问题。抱歉!

0

由 dnolen 发布的评论:

不用担心!很高兴 Datomic 对你来说效果不错 :)

0

评论者:gordongustafson

已经很久了,但这里有一个短的补丁来实现 findall,如果有人想审查的话。:)

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