序言列表中数字的唯一性

时间:2019-03-06 22:13:33

标签: list prolog unique

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

create_option

但这与我想要的完全相反。

例如,预期会得到这些结果。

2

但是,它给出了

unique(M,List) :- 
 append(X,Y,List),
 member(M,X),
 member(M,Y).

有没有一种方法可以修改我的代码以提供所需的结果?

1 个答案:

答案 0 :(得分:0)

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

这是询问X在List中是否唯一的另一种方式:如果我从List中获取X,则X不再在List中。您可以像这样将其转换为Prolog:

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