1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
DOMAINS
list= symbol*
list_I = integer*
PREDICATES
compare(list,list)
exacte(list,list,list_I)
Tester(list,list,list_I)
decaler(list_I,list_I)
existe(list,list,list_I,integer,list_I)
element(list,integer,symbol)
verif(symbol,list,list_I)
inclus(list_I,list_I)
dans(integer,list_I)
CLAUSES
compare(X,X).
exacte([A|X],[B|Y],L) :- A<>B,exacte(X,Y,L1), decaler(L1,L).
exacte([A|X],[B|Y],L) :- A=B, exacte(X,Y,L1) , decaler(L1,L2),L=[1|L2].
exacte([],[],[]).
decaler([A|X],[B|Y]):- B=A+1,decaler(X,Y).
decaler([],[]).
Tester(X,Y,L):- exacte(X,Y,E),existe(X,Y,L,1,E).
existe([A|X],Y,L,R1,E):- R2=R1+1,existe(X,Y,LT,R2,E), element(Y,R1,C) , A<>C, verif(A,Y,L3),not(inclus(L3,E)), L= [R1|LT].
existe([A|X],Y,L,R1,E):- R2=R1+1,existe(X,Y,LT,R2,E), element(Y,R1,C) , A<>C, verif(A,Y,L3),inclus(L3,E),L= LT.
existe([A|X],Y,L,R1,E):- R2=R1+1,existe(X,Y,LT,R2,E), element(Y,R1,C) , A=C, L= LT.
existe([],_,[],_,_).
element([A|_],1,A) .
element([_|L],R,X):- R>1,R1=R-1, element(L,R1,X).
verif(A,[A|X],[1|Y]):- verif(A,X,L),decaler(L,Y).
verif(A,[B|Y],L):- A<>B,verif(A,Y,L2),decaler(L2,L).
verif(_,[],[]).
inclus([A|X],Y):- inclus(X,Y),dans(A,Y).
inclus([],_).
dans(A,[A|_]).
dans(A,[B|Y]):- A<>B,dans(A,Y). |
Partager