有没有一种简单的方法可以使序言中的查询仅返回每个结果一次?

例如我正在尝试类似的东西:

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/

10-16 11:09