如何在 bagof、setof 和 findall 之间进行选择?有什么重要的区别吗?哪个最常用,哪个最安全?感谢您的评论/回答。
我查看了SWI-Prolog 手册页findall/3
,发现它们非常相似。
如何在 bagof、setof 和 findall 之间进行选择?有什么重要的区别吗?哪个最常用,哪个最安全?感谢您的评论/回答。
我查看了SWI-Prolog 手册页findall/3
,发现它们非常相似。
这是一个很好的问题!
我并不想给出一个详尽的答案,但我想提出几条思路来帮助您更好地理解这些谓词:
findall/3
setof/3
此外,我建议您阅读 Richard O'Keefe 的书The Craft of Prolog以获取有关这些谓词的宝贵信息。
findall/3
我发现和之间的一个重要区别bagof/3
是后者不会复制它积累的术语。这可能是至关重要的,例如,如果您的列表收集属性变量,例如在使用 建模问题时library(clpfd)
。