如何防止 Prolog 中的重复匹配?

问题描述 投票:0回答:0

如果这是一个愚蠢的问题,请原谅我,但我是 Prolog 的初学者(到目前为止已经有几个小时了!)并且有点困惑。不确定我是否在尝试做超出我水平的事情。

想象一下我有一组人...

parent(daddy, john).
parent(daddy, jim).

...和以下谓词来查找兄弟姐妹...

sib(X, Y) :- parent(Z, X), parent(Z, Y), not(X = Y).

如果我运行

sib(X, Y).
,它工作正常,但给我重复项,例如...

X = jim,
Y = john ;
X = john,
Y = jim ;
false

我在想办法避免重复。

我看到了this answer,它使用了

setof
,并花了一些时间阅读了那个谓词,但是a)无法确定它是否是我需要的,b)不能(还)理解它。

有人能帮助新手吗?谢谢

以防万一,我在 Ubuntu 上使用 SWI-Prolog

prolog
© www.soinside.com 2019 - 2024. All rights reserved.