测试列表是否表示没有重复的集合

时间:2012-01-25 16:10:00

标签: prolog

内置谓词setof/3可用于创建没有重复的有序列表。

我还可以用它来测试列表是否代表没有重复的集合吗?喜欢这个?

no_duplicates(L) :- setof(_,_,L).

2 个答案:

答案 0 :(得分:2)

您不能完全按照您描述的方式使用它。但是,如果您要求列表遍历成员列表,则可以使用setof来确定列表是否为集合,然后根据原始集检查集合。如果它们具有相同的长度,则所有元素都是唯一的。

no_duplicates(L) :-
    setof(X, member(X, L), Set), 
    length(Set, Len), 
    length(L, Len).

答案 1 :(得分:0)

你做不到。你的论点没有充分实例化。

如果您使用的是SWI-Prolog,则可以使用谓词 lists模块中的is_set/1