1 / 36

Contrôle du moteur Prolog

Contrôle du moteur Prolog. Nous avons étudié le fonctionnement du moteur Prolog. Nous allons maintenant montrer qu’il est possible de le contrôler L’outil de base pour agir sur le comportement de Prolog est un prédicat prédéfini appelé le CUT (ou coupure). La coupure (cut).

lita
Download Presentation

Contrôle du moteur Prolog

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Contrôle du moteur Prolog

  2. Nous avons étudié le fonctionnement du moteur Prolog. Nous allons maintenant montrer qu’il est possible de le contrôler • L’outil de base pour agir sur le comportement de Prolog est un prédicat prédéfini appelé le CUT (ou coupure)

  3. La coupure (cut) • Le cut est un prédicat déterministe qui peut toujours être effacé • Son effacement a pour effet de « couper » les choix en attente portant • sur le but qui l’a introduit dans le pile • ainsi que sur tous les buts introduits depuis son introduction

  4. a :- b. %0 b :- c, !, d. %1 b. %0 c. %1 c :- e , f. %0 P = a. 0 P = b. 1 P = c,!,d. 1 P = !,d.  ! P=d. no Un premier exemple

  5. b(1). %1 b(2). %0 c(1). %1 c(2). %0 {X=_,Y=_}P=b(X),c(Y). 1 {X=1,Y=_} P=c(Y). 1 {X=1,Y=1}P=.succès 0 {X=1,Y=2}P=.succès {X=_,Y=_}P=b(X),c(Y). 0 {X=2,Y=_}P=c(Y). 1 {X=2,Y=1}P=.succès 0 {X=2,Y=2}P=.succès Effet du Cut dans une questionavec variables

  6. b(1). %1 b(2). %0 c(1). %1 c(2). %0 {X=_,Y=_}P=b(X),!,c(Y). 1 {X=1,Y=_} P=!, c(Y).  ! {X=1,Y=_} P=c(Y). 1 {X=1,Y=1}P=.succès 0 {X=1,Y=2}P=.succès Effet du Cut dans une questionavec variables le cut rend déterministe les prédicats qui le précèdent

  7. a(X,Y):- b(X),c(Y). %1 a(3,3). %0 b(1). %1 b(2). %0 c(1). %1 c(2). %0 {X=_,Y=_}P=a(X,Y). 1{X=_,Y=_}P=b(X),c(Y). 1 {X=1,Y=_}P=c(Y). 1 {X=1,Y=1} P=. succès 0 {X=1,Y=2} P=. succès 0 {X=2,Y=_}P=c(Y). 1 {X=2,Y=1} P=. succès 0 {X=2,Y=2} P=. succès 0{X=3,Y=3}P=b(3),c(3). no Effet du Cut dans la queue d’une règle

  8. a(X,Y):- b(X),!, c(Y). %1 a(3,3). %0 b(1). %1 b(2). %0 c(1). %1 c(2). %0 {X=_,Y=_}P=a(X,Y). 1 {X=_,Y=_}P=b(X), ! ,c(Y). 1 {X=1,Y=_}P= !,c(Y).  ! {X=1,Y=_}P=c(Y). 1 {X=1,Y=1} P=. succès 0 {X=1,Y=2} P=. succès Effet du Cut dans la queue d’une règle

  9. a :- fail. %1 a . %0 P = a. 1 P = fail . échec 0 P = . succès Effet du Cut sur le réponse(succès ou bien échec)

  10. a :- !, fail. %1 a . %0 P = a. 1 P = !, fail .  ! P = fail . échec Effet du Cut sur le réponse(succès ou bien échec)

  11. a(_). %1 a(1). %0 {X=_}P = a(X). 1 {X=_}P = . succès 0 {X=1}P = . succès Effet du Cut sur le réponse(instanciation de variable)

  12. a(_):- !. %1 a(1). %0 {X=_}P = a(X). 1 {X=_}P = ! .  ! {X=_}P = . succès Effet du Cut sur le réponse(instanciation de variable)

  13. chiffre(0). %9 chiffre(1). %8 chiffre(2). %7 chiffre(3). %6 chiffre(4). %5 chiffre(5). %4 chiffre(6). %3 chiffre(7). %2 chiffre(8). %1 chiffre(9). %0 Comment obtenir uniquement le premier chiffre (0) ? ?- chiffre(X). A quoi cela sert-il ?obtenir une unique solution

  14. chiffre(0). %9 chiffre(1). %8 chiffre(2). %7 chiffre(3). %6 chiffre(4). %5 chiffre(5). %4 chiffre(6). %3 chiffre(7). %2 chiffre(8). %1 chiffre(9). %0 Comment obtenir uniquement le premier chiffre (0) ? ?- chiffre(X), ! . A quoi cela sert-il ?obtenir une unique solution

  15. chiffre(0). %9 chiffre(1). %8 chiffre(2). %7 chiffre(3). %6 chiffre(4). %5 chiffre(5). %4 chiffre(6). %3 chiffre(7). %2 chiffre(8). %1 chiffre(9). %0 {X=_} P = chiffre(X) , ! . 9 {X=0} P = !.  ! {X=0} P=. succes A quoi cela sert-il ?obtenir une unique solution

  16. chiffre(0). %9 chiffre(1). %8 chiffre(2). %7 chiffre(3). %6 chiffre(4). %5 chiffre(5). %4 chiffre(6). %3 chiffre(7). %2 chiffre(8). %1 chiffre(9). %0 premier_chiffre(X) :- chiffre(X), ! . Comment obtenir uniquement le premier chiffre (0) ? A quoi cela sert-il ?obtenir une unique solution

  17. chiffre(0). %9 chiffre(1). %8 chiffre(2). %7 chiffre(3). %6 chiffre(4). %5 chiffre(5). %4 chiffre(6). %3 chiffre(7). %2 chiffre(8). %1 chiffre(9). %0 premier_chiffre(C) :- chiffre(C), ! . %0 {X=_} P=premier_chiffre(X). 0 {X=_} P=chiffre(X),!. 9 {X=0} P=!.   ! {X=0} P=. succes A quoi cela sert-il ?obtenir une unique solution

  18. max(X,Y,X) :- Y =< X. %1 max(X,Y,Y) :- X < Y. %0 {X=_} P= max(2,3,X). 1 {X=2} P= 3=<2. no 0 {X=3} P= 2<3. < {X=3} P=. succes A quoi cela sert-il ?optimiser le moteur

  19. max(X,Y,X) :- Y =< X. %1 max(X,Y,Y) :- X < Y. %0 {X=_} P= max(3,2,X). 1 {X=3} P= 2=<3. =< {X=2} P=. succes 0 {X=2} P= 3<2. no A quoi cela sert-il ?optimiser le moteur

  20. max(X,Y,X) :- Y =< X, ! . %1 max(X,Y,Y) :- X < Y. %0 {X=_} P= max(3,2,X). 1 {X=3} P= 2=<3, !. =< {X=3} P= !.   ! {X=3} P=. succes A quoi cela sert-il ?optimiser le moteur

  21. max(X,Y,X) :- Y =< X, ! . %1 max(X,Y,Y) :- X < Y. %0 {X=_} P= max(2,3,X). 1 {X=2} P= 3=<2, !. no 0 {X=3} P= 2<3. < {X=3} P=. succes A quoi cela sert-il ?optimiser le moteur

  22. max(X,Y,X) :- Y =< X, ! . %1 max(_,Y,Y). %0 {X=_} P= max(3,2,X). 1 {X=3} P= 2=<3, !. =< {X=3} P= !.   ! {X=3} P=. succes Peut-on encore simplifier ?

  23. max(X,Y,X) :- Y =< X, ! . %1 max(_,Y,Y). %0 {X=_} P= max(2,3,X). 1 {X=2} P= 3=<2, !. no 0 {X=3} P=. succes Peut-on encore simplifier ?

  24. max(X,Y,X) :- Y =< X, ! . %1 max(_,Y,Y). %0 P= max(2,3,2). 1 {X=2} P= 3=<2, !. no Peut-on encore simplifier ?

  25. max(X,Y,X) :- Y =< X, ! . %1 max(_,Y,Y). %0 P= max(2,3,3). 0 P=. succes Peut-on encore simplifier ?

  26. max(X,Y,X) :- Y =< X, ! . %1 max(_,Y,Y). %0 P= max(3,2,2). 0 P=. succes Peut-on encore simplifier ?

  27. non_c :- c , ! , fail. %1 non_c. %0 P=non_c. 1 P= c, ! , fail. c P= ! , fail.  ! P= fail. no A quoi cela sert-il ?définir la négation

  28. non_c :- c , ! , fail. %1 non_c. %0 P=non_c. 1 P= c, ! , fail. no 0 P= . succes A quoi cela sert-il ?définir la négation

  29. Définir un (méta) prédicatnot/1 • prend en argument un prédicat • échoue si ce prédicat réussit • réussit dans le cas contraire not(P) :- P , ! , fail. %1 not(_). %0

  30. proc(X) :- X=0, ! ,write(‘nul’). %1 proc(_):- write(‘non nul’). %0 Proc(X) Si (X==0)ecrire(«nul») Sinon ecrire(«non nul») FinProc A quoi cela sert-il ?implémenter une structure alternative

  31. proc(X) :- X=0,!,write(‘nul’). %1 proc(_):- write(‘non nul’). %0 P=proc(0). 1 P= 0=0, !, write(‘nul’). = P= ! , write(‘nul’). ! P= write(‘nul’). write P=.succès A quoi cela sert-il ?implémenter une structure alternative

  32. proc(X) :- X=0,!,write(‘nul’). %1 proc(_):- write(‘non nul’). %0 P=proc(1). 1 P= 1=0, !, write(‘nul’). no 0 P= write(‘non nul’). write P=.succès A quoi cela sert-il ?implémenter une structure alternative

  33. Définir un (méta) prédicatsi/3 • prend en argument trois prédicats • Si le premier s’efface alors effacer le second • Sinon effacer le troisième si(C,P,_) :- C, !, P. %1 si(_,_,Q) :- Q. %0

  34. repeat. %1 repeat :- repeat %0 proc :- repeat, a, b, c, !. %0 Proc repeter a b jusque c A quoi cela sert-il ?implémenter une structure répétitive

  35. On suppose que les prédicats a et b sont déterministes et s’effacent avec succès P= repeat,a,b,c,!. 1 P= a,b,c,!. a P= b,c,!. b P= c,!. No 0 P= repeat,a,b,c,!. a P= b,c,! b P= c,!. c P= !.     ! P=. succes repeat. %1repeat :- repeat %0proc :- repeat, a, b, c, !. %0

  36. Proc :- repeat, read(Note), Si( Note>10, write(“admis”), write(« refuse ») ), Note=-1, !. Proc Repeter Lire(Note) si Note>10 écrire(«admis») sinon écrire(«refuse») Jusque Note=-1 A quoi cela sert-il ?Traduire le procédure suivante 

More Related