La retrocessió és un dels conceptes fonamentals en Prolog i en la programació lògica en general. És el mecanisme que Prolog utilitza per explorar diferents possibilitats quan intenta satisfer una consulta. En aquesta secció, aprendrem què és la retrocessió, com funciona i com podem utilitzar-la de manera efectiva en els nostres programes Prolog.

Què és la Retrocessió?

La retrocessió és el procés pel qual Prolog torna enrere per trobar altres solucions possibles quan una via de solució falla. Quan Prolog intenta satisfer una consulta, segueix una sèrie de passos:

  1. Exploració de Regles i Fets: Prolog intenta satisfer la consulta utilitzant els fets i les regles definides.
  2. Unificació: Prolog intenta unificar la consulta amb els fets i les regles.
  3. Retrocessió: Si una via de solució falla, Prolog torna enrere (retrocedeix) per provar altres vies possibles.

Exemple de Retrocessió

Considerem un exemple senzill per il·lustrar la retrocessió. Suposem que tenim els següents fets i regles en Prolog:

pare(josep, maria).
pare(josep, joan).
pare(joan, anna).

avi(X, Y) :- pare(X, Z), pare(Z, Y).

Si fem la consulta avi(josep, Y)., Prolog seguirà els següents passos:

  1. Primera Unificació: Prolog intenta satisfer avi(josep, Y) utilitzant la regla avi(X, Y) :- pare(X, Z), pare(Z, Y).
  2. Unificació de pare(josep, Z): Prolog troba que pare(josep, maria) i pare(josep, joan) són possibles unificacions.
  3. Primera Via: Prolog prova pare(josep, maria), i després intenta satisfer pare(maria, Y), però no troba cap fet que satisfaci aquesta consulta.
  4. Retrocessió: Prolog retrocedeix i prova la següent possibilitat, pare(josep, joan).
  5. Segona Via: Prolog prova pare(josep, joan), i després intenta satisfer pare(joan, Y), trobant pare(joan, anna).
  6. Solució: Prolog troba que Y = anna és una solució.

Exercicis Pràctics

Exercici 1: Definint Regles amb Retrocessió

Defineix una regla germans(X, Y) que sigui certa si X i Y són germans (tenen el mateix pare).

pare(josep, maria).
pare(josep, joan).
pare(joan, anna).

germans(X, Y) :- pare(Z, X), pare(Z, Y), X \= Y.

Solució

pare(josep, maria).
pare(josep, joan).
pare(joan, anna).

germans(X, Y) :- pare(Z, X), pare(Z, Y), X \= Y.

Exercici 2: Utilitzant Retrocessió per Trobar Totes les Solucions

Fes una consulta per trobar tots els germans de joan.

?- germans(joan, Y).

Solució

?- germans(joan, Y).
Y = maria ;
false.

Errors Comuns i Consells

  1. No oblidar la condició X \= Y: Quan definim regles com germans, és important assegurar-nos que X i Y no siguin la mateixa persona.
  2. Comprendre la retrocessió: És crucial entendre com funciona la retrocessió per escriure regles eficients i evitar bucles infinits.
  3. Utilitzar la retrocessió a favor: La retrocessió pot ser una eina poderosa per explorar totes les possibles solucions a una consulta.

Resum

En aquesta secció, hem après què és la retrocessió i com Prolog la utilitza per explorar diferents vies de solució. Hem vist exemples pràctics i hem practicat amb exercicis per reforçar el concepte. La retrocessió és una característica fonamental de Prolog que ens permet escriure programes que poden explorar múltiples solucions de manera eficient.

© Copyright 2024. Tots els drets reservats