检查列表中的所有元组是否不同(ECLiPSe)

时间:2016-05-17 13:18:20

标签: list prolog tuples

我有一个包含这样的元组的列表:

[(1,2),(5,3),(6,7)]

我试图编写一个谓词,检查列表中的所有元组是否都不同。以下行适用于带有整数的列表,但不适用于带有元组的列表:

all_diff(L) :- \+ (select(X,L,R),member(X,R)).

member/2可以正常检查元组是否在列表中,但是select/3是否存在元组问题。它给出了类型错误。

如何检查所有元组是否不同?

1 个答案:

答案 0 :(得分:0)

@false指出select/3在ECLiPSe中不起作用,因为在该系统中它是一个与文件相关的操作。

我想继续使用相同的系统,所以我为元组编写了一个选择:

%Given a list of tuples this checks if they are all different
allDiffTuples(L) :- \+ (selectTuple(X,L,R),member(X,R)).

selectTuple((A,B),[(A,B)|T],T).
selectTuple((A,B),[H|T],[H|R]) :-
    selectTuple((A,B),T,R).