CSI2520 % extraire une phrase et retourner le reste phrase(X,Z):- groupeDuNom(X,Y), groupeDuVerbe(Y,Z). groupeDuNom(X,Z):- determinant(X,Y), nom(Y,Z)

  • Published on
    03-Apr-2015

  • View
    107

  • Download
    1

Embed Size (px)

Transcript

<ul><li> Page 1 </li> <li> CSI2520 % extraire une phrase et retourner le reste phrase(X,Z):- groupeDuNom(X,Y), groupeDuVerbe(Y,Z). groupeDuNom(X,Z):- determinant(X,Y), nom(Y,Z). groupeDuVerbe(X,Z):- verbe(X,Y), groupeDuNom(Y,Z). </li> <li> Page 2 </li> <li> CSI2520 determinant([le|Z],Z). determinant([la|Z],Z). determinant([un|Z],Z). determinant([une|Z],Z). determinant([les|Z],Z). determinant([des|Z],Z). nom([chat|Z],Z). nom([chien|Z],Z). nom([garcon|Z],Z). nom([fille|Z],Z). verbe([aime|Z],Z). verbe([regarde|Z],Z). verbe([attaque|Z],Z). </li> <li> Page 3 </li> <li> CSI2520 ?- phrase([la,fille,aime,le,chien],[]). yes </li> <li> Page 4 </li> <li> CSI2520 phrase --&gt; groupeDuNom, groupeDuVerbe. groupeDuNom --&gt; determinant, nom. groupeDuVerbe--&gt; verbe, groupeDuNom. determinant --&gt; [le]. determinant --&gt; [la]. determinant --&gt; [un];[une];[des];[les]. nom --&gt; [fille];[garcon];[chat];[chien]. verbe --&gt; [regarde];[attaque];[aime]. </li> <li> Page 5 </li> <li> CSI2520 phrase --&gt; groupeDuNom(N), groupeDuVerbe(N). groupeDuNom(N) --&gt; determinant(N), nom(N). groupeDuVerbe(N) --&gt; verbe(N), groupeDuNom( _ ). determinant(singulier) --&gt; [le];[la];[un];[une]. determinant(pluriel) --&gt; [les];[des]. nom(singulier) --&gt; [fille];[garcon];[chat];[chien]. nom(pluriel) --&gt; [filles];[garcons];[chats];[chiens]. verbe(singulier) --&gt; [regarde];[attaque];[aime]. verbe(pluriel) --&gt; [regardent];[attaquent];[aiment]. </li> <li> Page 6 </li> <li> CSI2520 phrase(N,ph(GN,GV)) --&gt; groupeDuNom(N,GN), groupeDuVerbe(N,GV). groupeDuNom(N,gNom(Det,Nom)) --&gt; determinant(N,Det), nom(N,Nom). groupeDuVerbe(N,gVerbe(Verbe,GN)) --&gt; verbe(N,Verbe), groupeDuNom(N,GN). determinant(singulier,det(le)) --&gt; [le]. nom(singulier,nom(chat)) --&gt; [chat]. verbe(singulier,verbe(aime)) --&gt; [aime].... </li> <li> Page 7 </li> <li> CSI2520 ?- phrase(N,Arbre,[le,chien,attaque,le,garcon]). N=singulier Arbre= ph(gN(det(le),nom(chien)),gVerbe(verbe(attaque), gNom(det(le),nom(garcon)))). </li> <li> Page 8 </li> <li> CSI2520 determinant(N,det(Det)) --&gt; [Det], estDeterminant(Det,N). nom(N,nom(Nom)) --&gt; [Nom], estNom(Nom,N). verbe(N,verbe(Verbe)) --&gt; [Verbe],estVerbe(Verbe,N).. % dictionnaire estDeterminant(le,singulier). estDeterminant(les,pluriel). estNom(chat,singulier). estVerbe(aiment,pluriel). </li> <li> Page 9 </li> <li> CSI2520 deplacement --&gt; mouvement. deplacement --&gt; mouvement,deplacement. mouvement --&gt; [haut]. mouvement --&gt; [bas]. ?- deplacement([haut,haut,bas,haut],X). X = [haut, bas, haut] ; X = [bas, haut] ; X = [haut] ; X = [] ; false. </li> <li> Page 10 </li> <li> CSI2520 deplacement(E) --&gt; mouvement(E). deplacement(E) --&gt; mouvement(E1), deplacement(E2), {E is E1+E2}. mouvement(1) --&gt; [haut]. mouvement(-1) --&gt; [bas]. 1 ?- deplacement(E,[haut,haut,bas,haut],X). E = 1, X = [haut, bas, haut] ; E = 2, X = [bas, haut] ; E = 1, X = [haut] ; E = 2, X = [] ; false. </li> <li> Page 11 </li> <li> CSI2520 Un mta-Interprteur Prolog est un programme ecrit en Prolog pour interprter les commandes Prolog: Prolog dans Prolog! Une ralisation dun langage L dans L est souvent considere comme une preuve de laspect gnral du langage L. On peut avoir Java dans Java, C dans C, etc...La question est de savoir a quel point il est facile dexprimer un langage par ce meme langage. </li> <li> Page 12 </li> <li> CSI2520 % pour resoudre un but vrai solve0(true) :- !. % pour resoudre une liste de buts solve0 ((G, Gs)) :- !, solve0(G), solve0(Gs). % pour resoudre un but, trouver sa clause et resoudre ses conditions solve0(G) :- !, clause(G, Body), solve0(Body). </li> <li> Page 13 </li> <li> CSI2520 ?- solve0(member(X, [a, c])). X = a ; X = c ; No ?- solve0((member(X, [a, c, f]), | member(X, [b, c, d, f, g]))). X = c ; X = f ; No </li> <li> Page 14 </li> <li> CSI2520 Cet interprteur ne marchera pas pour les oprations pr-dfinies (built-in). Ces oprations nont pas de clauses. Elles sont directement interprtes par le systeme Prolog. Une amrioration du prcdent interprteur concerne la distinction des oprations pr- dfinies. Aussi, nous distinguerons les faits des regles. Le prdicat builtIn permet de reconnaitre les prdicats pr-dfinis: builtIn(G) :- predicate_property(G, built_in). builtIn(G) :- predicate_property(G, interpreted). </li> <li> Page 15 </li> <li> CSI2520 solve((Head :- Body)):- !, assertz((Head :- Body)). solve(true):- !. solve((G, Gs)):- !,solve(G), solve(Gs). solve(G):- builtIn(G),!, call(G). solve(G):- clause(G, Body), solve(Body). </li> <li> Page 16 </li> <li> CSI2520 On peut galement utiliser notre propre boucle dinterprtation: do :- nl, write('query: '), read(Q), Q =\= stop, do1(Q). do. %arret lorsque Q == stop </li> <li> Page 17 </li> <li> CSI2520 do1(Q) :- solve(Q), write('yes: '), writeln(Q), write('OK? (CR or anything else) '), get0(Ans), Ans == 10, % if Ans is not CR, fail back to solve(Q) !, do. do1(_) :- writeln(no), do. </li> <li> Page 18 </li> <li> CSI2520 ?- do. query: writeln(okay). yes: writeln(okay) OK? (CR or anything else) query: member(X, [a, b]). yes: member(a, [a, b]) OK? (CR or anything else) n yes: member(b, [a, b]) OK? (CR or anything else) query: member(X, [a, b, c]), member(X, [b, c, d, e]). yes: member(b, [a, b, c]), member(b, [b, c, d, e]) OK? (CR or anything else) n yes: member(c, [a, b, c]), member(c, [b, c, d, e]) OK? (CR or anything else) query: assert(added(one, fact)). yes: assert(added(one, fact)) OK? (CR or anything else) </li> <li> Page 19 </li> <li> CSI2520 query: added(X, Y). yes: added(one, fact) OK? (CR or anything else) n no query: a(1) :- true. yes: a(1):-true OK? (CR or anything else) query: a(2) :- a(1). yes: a(2):-a(1) OK? (CR or anything else) query: a(X). yes: a(1) OK? (CR or anything else) n yes: a(2) OK? (CR or anything else) query: stop. Yes </li> </ul>