a) il prolog va in loop:
questo avviene perche' c'e una ricorsione paricolare:
a:-a.
a.
se chedo
?- a.
viene generato nuovamente il goal a e nuovamente il goal a ...
perche' la regola "a:-a." viene applicata di continuo essendo
stata inserita nel database per prima. Il fatto "a." non verra'
mai utilizzato.
In questo caso di soluzioni non ce ne sono. O meglio la soluzione c'e',
ma il prolog non e' in grado di trovarla.
b) ci sono infinite soluzioni
Se invece ho questo caso:
b.
b:-b.
quando chiedo:
?- b.
allora il prolog da una prima risposta, yes usando il fatto "b."
se chiedo una seconda soluzione verra' usata laregola "b:-b."
e successivamente il fatto "b" e si trovera' una seconda soluzione.
Il bactracking puo' trovare in questo caso un numero infinito di soluzioni
una dopo l'altra. (Ma il prolog non cade in loop).
ATTENZIONE - nel prolog che utilizzate via rete nel caso che il prolog
vada in loop, si ha una situazione di errore, ed il prolog termina
automaticamete dopo aver raggiunto un certo limite di uso della CPU.
Nel secondo casi il Prolog risponde YES un certo numero di volte poi si ferma
con il messaggio "troppe soluzioni"
Bianchi
+------------------------------------+----------------------------------------+
| Dario Bianchi |
| Dipartimento di Ingegneria dell'Informazione phone +39 521 905734 |
| Universita' degli Studi di Parma fax +39 521 905723 |
| 43100 Parma - Italy E-mail bianchi@ce.unipr.it |
+------------------------------------+----------------------------------------+