3.3 Teoria de la demostració - La Salle
3.3 Teoria de la demostració - La Salle
3.3 Teoria de la demostració - La Salle
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