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

好的,是的,我认为run-a等的名字不是关键——目前来看,只要我们真正理解其影响,并且得到了一些使用,就可以将这些实现细节放在后面。

0 投票

评论由:abrooks

我在考虑简单地让{{run}}/ * 根据第一个参数条件化,如果第一个参数是替换映射,我们使用嵌套形式。

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

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

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

0 投票

评论者:dnolen

太好了,非常感谢。

0 投票

评论由:abrooks

我没有忘记,只是事情太忙了。

我有可能在圣诞节前完成这项工作,否则,那就是在新年后。

0 投票

评论由:abrooks

在一场车祸后,前往伦敦和摩洛哥旅行,工作繁忙,并且一直在关注核心.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报告)
...