13.07.2015 Views

Cours PROLOG.pdf

Cours PROLOG.pdf

Cours PROLOG.pdf

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Dossier sur <strong>PROLOG</strong>La recherche de solution• on la garde• et partout on remplace X par tEx : ?- X=f,Y=X.X = fY = fYesIII.1.3.2.5. RenversementSoient X une variable et t un terme.Si une paire est de la forme t = X on la remplace par X = tEx : ?- t=X.X = tYesIII.1.3.2.6. Test d’occurrenceSoient X une variable et t un terme.Si une paire est de la forme• X figure dans t• t n’est pas réduit à XX = ttelle queOn stoppe l’unification par un échec pour éviter une boucle infinie.Rem : Cette sixième règle de l’algorithme de Herbraund n’est pas appliquée par défaut dans SWI-<strong>PROLOG</strong> © pour des raisonsde performances.?- X=t(X,J).X = t(t(t(t(t(t(t(t(t(t(..., ...), _G158), _G158), _G158), _G158), _G158),_G158), _G158), _G158), _G158)J = _G158YesCependant, comme on peut le voir ci-dessus la version 5.0.2 sait s’arrêter et ne poursuit pas l’unification à l’infinie.III.1.3.2.7. IndéterminismeComme nous l’avons dit cet algorithme est non déterministe. Ainsi, quand il est possible d’appliquer plusieurs règles, il fauttoutes les appliquer et quelque soit l’ordre d’exécution, le résultat sera le même.Ex : Essayons d’unifier f ( a, g( Y ),h( X , g( a))) = f ( X , g( h( a,X )),h( Z,g( X )))Première possibilité :⎧a= X⎧X= a⎪⎪1) Eclatement : ⎨g( Y ) = g( h( a, X ))2) Renversement : ⎨g( Y ) = g( h( a,X ))⎪ ( X , g( a)) = h( Z,g( X ))⎪⎩h⎩h( X , g( a)) = h Z,g(X⎧X= a⎧X= a⎪⎪3) Elimination : ⎨g( Y ) = g( h( a,a))4) Eclatement : ⎨Y= h( a,a)⎪h( a,g( a)) = h( Z,g( a))⎪⎩⎩h( a,g( a)) = h ( Z,g( a))⎧X= a⎪⎧X= aY = h( a,a)⎪5) Eclatement : ⎨6) Suppression : ⎨ Y = h ( a,a)⎪a= Z⎪g( a) = g( a)⎩a= Z⎪⎩⎧X= a⎪7) Renversement : ⎨ Y = h( a,a)⎪⎩Z= aAutre possibilité :( ))28

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!