有没有一种简单的方法可以使序言中的查询仅返回每个结果一次?
例如我正在尝试类似的东西:
deadly(Xn) :- scary(X), Xn is X - 1, Xp is X + 1, not(safe(Xn)), safe(Xp).
deadly(Xp) :- scary(X), Xn is X - 1, Xp is X + 1, not(safe(Xp)), safe(Xn).
deadly(X).
并得到
X = 5
X = 5
X = 5
X = 5
....
对我没用。
最佳答案
您可以做的一件事是将setof/3
应用于生成解决方案的谓词。但是请注意,setof/3
是通过将sort/2
应用于bagof/3
传递的结果来实现的(至少在SWI-Prolog中是这种情况)。因此,如果您的解决方案生成器永远运行,那么setof/3
将永远不会被应用...
因此,我想尝试编程,以免生成重复项,即在有意义的地方使用cut(!)。
关于prolog - 前言的独特结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/724358/