あなたはまた、maplistと述語ユニーク/ 1を定義することを選ぶことができ/ 2は、リストが一意の要素で構成されている場合に成功します。次に、あなたの述語条件/ 5は、述語を呼び出すとして作用する:
:- use_module(library(apply)). % for maplist/2
condition(X1, X2, X3, X4, X5) :-
uniques([X1,X2,X3,X4,X5]).
uniques([]).
uniques([X|Xs]) :-
maplist(dif(X),Xs),
uniques(Xs).
?- condition(1,2,3,4,5).
true.
?- condition(1,2,3,4,1).
false.
とユニーク/ 1は、任意のリストのために使用することができます。
?- uniques([]).
true.
?- uniques([1,a,6,f(X)]).
true.
?- uniques([A,B,C]).
dif(A, C),
dif(A, B),
dif(B, C).
?- uniques([A,B,A]).
false.
?- uniques(U).
U = [] ;
U = [_G265] ;
U = [_G392, _G395],
dif(_G392, _G395) ;
U = [_G489, _G492, _G495],
dif(_G489, _G495),
dif(_G489, _G492),
dif(_G492, _G495) ;
.
.
.
間違いがあります:条件(1,2,3,3,4)が成立します。 – joel76
@ joel76:私は非常に愚かです。私はそれを修正した、ヒントのおかげで:-) – tas