我有一个包含这样的元组的列表:
[(1,2),(5,3),(6,7)]
我试图编写一个谓词,检查列表中的所有元组是否都不同。以下行适用于带有整数的列表,但不适用于带有元组的列表:
all_diff(L) :- \+ (select(X,L,R),member(X,R)).
member/2
可以正常检查元组是否在列表中,但是select/3
是否存在元组问题。它给出了类型错误。
如何检查所有元组是否不同?
答案 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).