欢迎!请参阅关于页面获取更多关于如何使用本平台的信息。
这可以通过注释逻辑变量,并通过传递当前替换,在其上运行,提取重物质化的值并把它统一回当前替换的方式,在运行过程中实现。
评论者:abrooks
我在尝试理解StackOverflow上这个问题的回答
http://stackoverflow.com/questions/7647758/prolog-findall-implementation
讨论用——支持嵌套版本的'run-a/'run-a**。绑定符号必须与现有的lvars匹配,以便统一所有返回值的向量。
我们应该提供模拟每个bagof、setof和findall的包装器吗?
我还没有确信当前的名字run-a/run-a**。 "a"实际上是一个内部实现细节。当我想到更好的名字时会发布更新的补丁(有任何想法吗?)。
评论者:dnolen
是的,请。是的,我认为run-a等的名字并不关键 - 现在的症状细节,直到我们真正理解其影响并得到一些应用。
我正在考虑简单地使{{run}}/ * 根据第一个参数条件化,如果第一个参数是替换映射,则使用嵌套形式。
我对{{bagof}}和{{findall}}的当前理解让我认为它们不值得在{{run}}嵌套功能之外实现。
我仍在考虑{{setof}},它是非常有用的,并将需要基础设施的帮助来实现高效。
感恩节后我将提交一个新补丁。
太好了,非常感谢。
我没有忘记,我只是有点忙。
有可能我在圣诞节之前完成它,否则,可能在新年之后。
在车祸发生后,前往伦敦和摩洛哥旅行,工作忙碌和核心逻辑活动繁忙的表面上(伟大的工作!),我现在又回到这个问题上了。
在我的实施中移植补丁后,我发现了一些错误,并意识到这些问题凸显了我对创建的一些语义的粗略理解。
现在我相当确信我们不想将这个命名与{{run}}或*}相关联。在嵌套上下文中使其具有相同意义过于牵强。
当前的机制仍然与{{findall}}/{{bagof}}/{{setof}}不完全匹配,因此我正在考虑最佳匹配方案。我会在我有有意义的思想时发布供审查。
很高兴听到你一切都好!不要担心,只要你方便,我会随时修复这个补丁。
虽然不是因为这个原因切换到了Datomic,它具有bagof/setof类型的聚合和子查询功能,但我不确定我是否或何时会回归这个问题。抱歉!
不必担心!很高兴Datomic对你来说效果良好 :)
评论者:gordongustafson
已经有一段时间了,这里有一个简短的补丁,用于实现findall,如果有人想要审查的话。 :)
findall