La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

CSI2520 ?- insert(a, L, [b, a, d, a, f]). L = [b, d, a, f] ; L = [b, a, d, f] ; no Linsertion et le retrait sont 2 concepts complémentaires!

Présentations similaires


Présentation au sujet: "CSI2520 ?- insert(a, L, [b, a, d, a, f]). L = [b, d, a, f] ; L = [b, a, d, f] ; no Linsertion et le retrait sont 2 concepts complémentaires!"— Transcription de la présentation:

1 CSI2520 ?- insert(a, L, [b, a, d, a, f]). L = [b, d, a, f] ; L = [b, a, d, f] ; no Linsertion et le retrait sont 2 concepts complémentaires!

2 CSI2520 notre-delete(R,[R|L],L). notre-delete(R,[X|LL], [X|L]) :- notre-delete(R,LL,L).

3 CSI2520 deleteall(X,[],[]). deleteall(X,[X|T],Result) :- deleteall(X,T,Result),!. deleteall(X,[H|T],[H|Result]) :- deleteall(X,T,Result). ?- deleteall(2,[1,2,4,3,2,6,2,2],L). L = [1, 4, 3, 6]. Quarrive-t-il si on retire la coupe?

4 CSI2520 intersection( [], Ys, [] ). intersection( [ X | Xs ], Ys, Zs ) :- not member( X, Ys), intersection( Xs, Ys, Zs ). intersection( [ X | Xs ], Ys, [ X | Zs ] ) :- member( X, Ys ), intersection( Xs, Ys, Zs ).

5 CSI2520 tri([],[]). tri([P|Q],T) :- partition(P,Q,G,D), tri(G,GG), tri(D,DD), append(GG,[P|DD],T). partition(P,[X|L],[X|PG],PD) :- X < P, partition(P,L,PG,PD). partition(P,[X|L],PG,[X|PD]) :- X >= P, partition(P,L,PG,PD). partition(P,[],[],[]).

6 CSI2520 Effectuer un traitement sur les éléments de listes traite-liste([],[]). traite-liste([X|L],[Y|T]) :- traite(X,Y), traite- liste(L,T). somme(L,S) :- somme(L,0,S). somme([X|L],T,S) :- TT is T+X, somme(L,TT,S). somme([],S,S).

7

8 CSI2520 mirror([ ], [ ]). mirror([X|L1], L2) :- mirror(L1,L3), append(L3, [X], L2). % append will dig into the list a second time

9 CSI2520 mirror2(Left, Right) :- invert(Left, [ ], Right). invert([X|L1], L2, L3) :- % the list is 'poured' invert(L1, [X|L2], L3). % into the second argument invert([ ], L, L). % at the deepest level, the result L is merely copied

10 CSI2520 Les listes peuvent être représentée avec le symbole fonctionnel binaire «. » suite {e1, e2, …} ==> liste (e1.(e2.(…))) La liste vide est notée « nil ». Elle sert souvent à marquer la fin de liste. Exemples : suite des variables X et Y => (X.Y) suite {gateau, fruit, glace} =>(gateau.(fruit.(glace.nil)))

11 CSI2520 Exemples :. XY... gateau fruit glace nil

12 CSI2520 Une liste correspond au cas particulier ou les branches gauches sont toujours des feuilles. On utilise le terme de peigne pour les désigner. Exercice : résoudre l'équation X.Y = gateau.fruit.glace.nil par identification on a la solution : {X = gateau; Y = fruit.glace.nil}

13 CSI2520 La notation X.Y représente une liste dont la tête (le 1er élément) est X et la queue (le reste de la liste) est Y. Cela constitue la base de lutilisation des listes dans les programmes Prolog. Attention le terme X.Y nest pas une liste mais plutôt une paire.

14 CSI2520 Les villes d'une province: province(ontario,toronto,ottawa,hamilton,kitchener, london). province(quebec,montreal,quebec_city,sherbrooke,t rois_rivieres). province(new_brunswick,saint_john,moncton,freder icton). Il faut plutôt utiliser une liste (province/2): province(quebec, montreal.( quebec_city.(sherbrooke.(trois_rivieres.nil)))). province(new_brunswick, saint_john.(moncton.(fredericton.nil))). province(ontario, toronto.ottawa.hamilton.kitchener.london.nil).

15 CSI2520 En pratique, on représente une liste avec les '[ ]': montreal.(quebec_city.(sherbrooke.(trois_rivieres. nil))) est représentée par: [montreal, quebec_city, sherbrooke, trois_rivieres] Pour avoir accés aux différents paramètres on utilise le '|'. On a donc [tete|queue].

16 CSI2520 Ainsi, on peut écrire: [saint_john,moncton,fredericton] qui est equivalent a: [saint_john | [moncton,fredericton]] qui est equivalent a: [saint_john | [moncton | [fredericton]]] qui est equivalent a: [saint_john | [moncton | [fredericton | [ ]]]] ou encore: [saint_john, moncton | [fredericton]] ou: [saint_john, moncton, fredericton | []] De manière générale: [x | queue] une liste dau moins un élément. [x, y | queue] une liste dau moins deux éléments.

17 CSI2520 Regle inProvince/2 qui retourne la province dans laquelle se trouve une ville X: inProvince(X,P) :- province(P, L), member(X, L). ?- inProvince(ottawa, P). P = ontario ; No ?- inProvince(V, new_brunswick). C = saint_john ; C = moncton ; C = fredericton ; No


Télécharger ppt "CSI2520 ?- insert(a, L, [b, a, d, a, f]). L = [b, d, a, f] ; L = [b, a, d, f] ; no Linsertion et le retrait sont 2 concepts complémentaires!"

Présentations similaires


Annonces Google