Contr le du moteur prolog
This presentation is the property of its rightful owner.
Sponsored Links
1 / 36

Contrôle du moteur Prolog PowerPoint PPT Presentation


  • 61 Views
  • Uploaded on
  • Presentation posted in: General

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).

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Contr le du moteur prolog

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

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


Un premier exemple

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


Effet du cut dans une question avec variables

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


Effet du cut dans une question avec variables1

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


Effet du cut dans la queue d une r gle

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


Effet du cut dans la queue d une r gle1

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


Effet du cut sur le r ponse succ s ou bien chec

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)


Effet du cut sur le r ponse succ s ou bien chec1

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)


Effet du cut sur le r ponse instanciation de variable

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)


Effet du cut sur le r ponse instanciation de variable1

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)


A quoi cela sert il obtenir une unique solution

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


A quoi cela sert il obtenir une unique solution1

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


A quoi cela sert il obtenir une unique solution2

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


A quoi cela sert il obtenir une unique solution3

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


A quoi cela sert il obtenir une unique solution4

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


A quoi cela sert il optimiser le moteur

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


A quoi cela sert il optimiser le moteur1

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


A quoi cela sert il optimiser le moteur2

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


A quoi cela sert il optimiser le moteur3

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


Peut on encore simplifier

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 ?


Peut on encore simplifier1

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 ?


Peut on encore simplifier2

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 ?


Peut on encore simplifier3

max(X,Y,X) :- Y =< X, ! .%1

max(_,Y,Y).%0

P= max(2,3,3).

0

P=. succes

Peut-on encore simplifier ?


Peut on encore simplifier4

max(X,Y,X) :- Y =< X, ! .%1

max(_,Y,Y).%0

P= max(3,2,2).

0

P=. succes

Peut-on encore simplifier ?


A quoi cela sert il d finir la n gation

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


A quoi cela sert il d finir la n gation1

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


D finir un m ta pr dicat not 1

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


A quoi cela sert il impl menter une structure alternative

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


A quoi cela sert il impl menter une structure alternative1

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


A quoi cela sert il impl menter une structure alternative2

proc(X) :- X=0,!,write(‘nul’).%1

proc(_):- write(‘non nul’).%0

P=proc(1).

1

P= 1=0, !, write(‘nul’). no

0P= write(‘non nul’).

write

P=.succès

A quoi cela sert-il ?implémenter une structure alternative


D finir un m ta pr dicat si 3

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


A quoi cela sert il impl menter une structure r p titive

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


Repeat 1 repeat repeat 0 proc repeat a b c 0

On suppose que les prédicats a et b sont déterministes et s’effacent avec succès

P= repeat,a,b,c,!.

1P= a,b,c,!.

aP= b,c,!.

bP= c,!. No

0P= repeat,a,b,c,!.

aP= b,c,!

bP= c,!.

cP= !.

  !P=. succes

repeat.%1repeat :- repeat %0proc :- repeat, a, b, c, !. %0


A quoi cela sert il traduire le proc dure suivante

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 


  • Login