如果列表L中的每个项目在列表U中恰好出现一次,则谓词成功

时间:2014-02-26 22:30:27

标签: list prolog unique

我需要Prolog的帮助。

如果列表L中的每个项目在列表U中只出现一次,则在Prolog中编写一个谓词,该谓词会成功。

unique(L,U).

1 个答案:

答案 0 :(得分:1)

执行此操作的方法之一(可能不是此分配要解决的方式):

unique(L, U) :-
    sort(L, Lunique),
    union(U, Lunique, X),
    msort(U, Usorted),
    msort(X, Xsorted),
    Usorted == Xsorted.

我们试一试:

?- unique([a, b], [a, b, c]).
true.

?- unique([a, b], [a, b, c, c]).
true.

?- unique([a, b], [a, a, b, c, c]).
false.

?- unique([b, a, c], [a, b, c, c]).
false.

?- unique([b, a, c], [a, b, c, e]).
true.

在SWI Prolog和ECLiPSe CLP中测试。