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

欢迎!请查看关于页面,了解更多关于如何使用本站的信息。

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

已经切换到Datomic,它具有bagof/setof类型聚合和子查询(尽管转换并非为此特定目的)。我不知道我何时才能回过头来做这件事。抱歉!

0投票
by

评论者:dnolen

没关系!很高兴看到Datomic对你来说很适用 :)

0投票
by

评论人:gordongustafson

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

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