List prolog中列表中数字的唯一性

List prolog中列表中数字的唯一性,list,prolog,unique,List,Prolog,Unique,到目前为止,我已经编写了这段代码(我在这里的Stack Overflow中找到了这段代码,并做了一些修改) 但这与我想要的正好相反 例如,预计将给出这些结果 ?- unique(1,[1,2,3]). yes ?- unique(1,[1,2,3,1]). no 但相反,它给了我们 ?- unique(1,[1,2,3]). no ?- unique(1,[1,2,3,1]). yes 有没有一种方法可以让我修改代码以获得所需的结果?您的代码有效地说“如果列表可以分为X和Y两部分,并且M

到目前为止,我已经编写了这段代码(我在这里的Stack Overflow中找到了这段代码,并做了一些修改)

但这与我想要的正好相反

例如,预计将给出这些结果

?- unique(1,[1,2,3]).
yes

?- unique(1,[1,2,3,1]).
no
但相反,它给了我们

?- unique(1,[1,2,3]).
no

?- unique(1,[1,2,3,1]).
yes

有没有一种方法可以让我修改代码以获得所需的结果?

您的代码有效地说“如果列表可以分为X和Y两部分,并且M在X和Y中都存在,那么M在列表中是唯一的。”这是一种非常聪明的方法,与您想要的正好相反

这里有另一种询问X在列表中是否唯一的方法:若我从列表中获取X,则X不再在列表中。您可以将其转换为序言,如下所示:

unique(X, List) :-
    select(X, List, ListWithoutX),
    \+ memberchk(X, ListWithoutX).
unique(X, List) :-
    select(X, List, ListWithoutX),
    \+ memberchk(X, ListWithoutX).