28.04.2013 Views

3.3 Teoria de la demostració - La Salle

3.3 Teoria de la demostració - La Salle

3.3 Teoria de la demostració - La Salle

SHOW MORE
SHOW LESS

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

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

Contro<strong>la</strong>nt <strong>la</strong> cerca <strong>de</strong> solucions<br />

L’estratègia <strong>de</strong> control estudiada amb backtracking cerca tots les solucions <strong>de</strong><br />

l’objectiu.<br />

En alguns casos el mecanisme <strong>de</strong> backtracking pot fer cerques innecessàries i per tant<br />

el procés <strong>de</strong> cerca <strong>de</strong> solucions es pot tornar ineficaç. Un exemple d’aquest cas és<br />

quan només volem una solució.<br />

Com programadors disposem <strong>de</strong>ls predicats cut (!) i fail per actuar sobre l’estratègia <strong>de</strong><br />

control. Estudiarem aquests predicats, en més <strong>de</strong>tall, en el proper apartat.<br />

Recor<strong>de</strong>u-vos que també és important l’ordre <strong>de</strong> les clàusules per l’estratègia <strong>de</strong><br />

control.<br />

4.<strong>3.3</strong> L’espai <strong>de</strong> solucions<br />

El caràcter no <strong>de</strong>terminista d’un programa lògic i <strong>la</strong> utilització <strong>de</strong> variables en l’objectiu<br />

juntament amb l’estratègia utilitzada per Prolog fa que l’espai <strong>de</strong> solucions possibles<br />

sigui un arbre. Aquest arbre, evi<strong>de</strong>ntment, no es construeix tot, sinó que es va<br />

construint/explorant a mesura que s’executa el programa.<br />

Arbre d’objectius<br />

L’estratègia <strong>de</strong> control amb backtracking, construeix un arbre <strong>de</strong> solucions per a<br />

l’objectiu <strong>de</strong>manat que anomenarem arbre d’objectius.<br />

Po<strong>de</strong>m distingir diferents tipus <strong>de</strong> camins en l’arbre:<br />

- el camí que ens porta a l’èxit, és a dir, el camí on arribem amb <strong>la</strong> llista d’objectius<br />

buida. En aquest cas, hem arribat a <strong>la</strong> clàusu<strong>la</strong> buida i per tant tenim una solució.<br />

- el camí que ens porta al fracàs, és a dir, on arribem amb una llista d’objectius en què<br />

el primer no pot ser <strong>de</strong>mostrat. En aquest cas, no tenim una solució i per tant hem <strong>de</strong><br />

tornar enrere (fer backtracking) per explorar una altra possibilitat per l’últim objectiu<br />

<strong>de</strong>mostrat.<br />

- el camí infinit, és a dir, el camí genera <strong>de</strong> forma cíclica nous objectius a <strong>de</strong>mostrar.<br />

En aquest cas, el programa no s’atura i és a causa d’una ma<strong>la</strong> programació.<br />

Trobant una solució amb backtracking.<br />

Si executem l’exemple ch04e02.pro amb l’objectiu likes(bill,What), veurem que el<br />

motor <strong>de</strong> Prolog ha <strong>de</strong> fer backtracking per trobar una solució.<br />

L’arbre d’objectius per l’objectiu donat és:<br />

106

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

Saved successfully!

Ooh no, something went wrong!