2
/* LIBRARY: quelques prédicats utiles ... */ delete(_,[],[]). delete(X,[X|R],R):-!. delete(X,[Y|R],[Y|R2]):- delete(X,R,R2). append([],X,X). append([U|X],Y,[U|Z]):- append(X,Y,Z). member(X,[X|T]). member(X,[_|T]):- member(X,T). last(X,[X]). last(X,[_|Y]):- last(X,Y). order(A,B):- A=<B. order(A,B):- A@=<B. /* @=< signifie: précède ou est égal */ card([],0). card([X|Y],N):- card(Y,N1), N is N1+1. Exemples d'invocation et résultats obtenus : ?- delete(two,[one,three,two,five],X). X = [one,three,five] ?- append([one,two],[three,four,five],X). X = [one,two,three,four,five] ?- append(X,[three,four,five],[one,two,three,four,five]). X = [one,two] ?- member(three,[one,two,three,four,five]). yes ?- member(X,[one,two,three,four,five]). X = one X = two X = three X = four X = five split(H,[A|X],[A|Y],Z):- order(A,H), split(H,X,Y,Z). split(H,[A|X],Y,[A|Z]):- order(H,A), split(H,X,Y,Z). split(_,[],[],[]). quisort([H|T],S):- split(H,T,A,B), quisort(A,A1), quisort(B,B1), append(A1,[H|B1],S),!. quisort([],[]). quisort([X],[X]). nthmember(1,[X|L],X). nthmember(N,[Y|L],X):- N1 is N-1, nthmember(N1, L, X ). add(X,L,L):- member(X,L),!. add(X,L,[X|L]). remdup([X|Y],L):- member(X,Y), remdup(Y,L),!. remdup([],[]). remdup([X|Y],[X|Y1]):- not(member(X,Y)), remdup(Y,Y1),. *Veuillez consulter le fichier [Exemples/Fichier10.pl] du CD. ?- card([one,two,three,four,five],Combien). Combien = 5 ?- card([one,two,three,four,five],4). No ?- nthmember(2,[one,two,three],X). X = two ?- nthmember(1,[one,two,three],one). yes ?- add(three,[one,four,five],New). New = [three,one,four,five] ?- add(three,[one,two,three,four],New). New = [one,two,three,four]

11 library

Embed Size (px)

Citation preview

Page 1: 11 library

/* LIBRARY: quelques prédicats utiles ... */ delete(_,[],[]). delete(X,[X|R],R):-!. delete(X,[Y|R],[Y|R2]):- delete(X,R,R2). append([],X,X). append([U|X],Y,[U|Z]):- append(X,Y,Z). member(X,[X|T]). member(X,[_|T]):- member(X,T). last(X,[X]). last(X,[_|Y]):- last(X,Y). order(A,B):- A=<B. order(A,B):- A@=<B. /* @=< signifie: précède ou est égal */ card([],0). card([X|Y],N):- card(Y,N1), N is N1+1.

Exemples d'invocation et résultats obtenus : ?- delete(two,[one,three,two,five],X). X = [one,three,five] ?- append([one,two],[three,four,five],X). X = [one,two,three,four,five] ?- append(X,[three,four,five],[one,two,three,four,five]). X = [one,two] ?- member(three,[one,two,three,four,five]). yes ?- member(X,[one,two,three,four,five]). X = one X = two X = three X = four X = five

split(H,[A|X],[A|Y],Z):- order(A,H), split(H,X,Y,Z). split(H,[A|X],Y,[A|Z]):- order(H,A), split(H,X,Y,Z). split(_,[],[],[]). quisort([H|T],S):- split(H,T,A,B), quisort(A,A1), quisort(B,B1), append(A1,[H|B1],S),!. quisort([],[]). quisort([X],[X]). nthmember(1,[X|L],X). nthmember(N,[Y|L],X):- N1 is N-1, nthmember(N1, L, X ). add(X,L,L):- member(X,L),!. add(X,L,[X|L]). remdup([X|Y],L):- member(X,Y), remdup(Y,L),!. remdup([],[]). remdup([X|Y],[X|Y1]):- not(member(X,Y)), remdup(Y,Y1),.

*Veuillez consulter le fichier [Exemples/Fichier10.pl] du CD.

?- card([one,two,three,four,five],Combien). Combien = 5 ?- card([one,two,three,four,five],4). No ?- nthmember(2,[one,two,three],X). X = two ?- nthmember(1,[one,two,three],one). yes ?- add(three,[one,four,five],New). New = [three,one,four,five] ?- add(three,[one,two,three,four],New). New = [one,two,three,four]

Page 2: 11 library