2009-09-14 11 views

risposta

3

Perdonami se ho la sintassi sbagliata, è stato un po 'che ho giocato con Prolog.


Una soluzione tipica è quella di introdurre un altro livello per le clausole, in questo modo:

married(X, Y) :- wife(X, Y). 
married(X, Y) :- wife(Y, X). 

e specificando i rapporti utilizzando la clausola moglie invece:

wife(jane, bob). 
wife(alice, john). 

?- married(jane, X). 
X = bob 

Maggiori informazioni possono essere trovato qui: CSc 8710, Deductive Databases and Logic Programming, chapter 6 - Logic and databases, sotto 6,5 - Relazioni speciali.

1

Come ho capito, il problema di base è che se le definizioni circolari sono consentite, anche se il linguaggio risultante è auto-consistente, ci possono essere conseguenze sottili che sono spesso contro-intuitive. Ci sono anche considerazioni sull'efficienza (le definizioni circolari comportano un sovraccarico extra).

Vedere questo detailed discussion per molte altre spiegazioni e diversi punti di vista.

1

Una possibile soluzione consiste nell'utilizzare la presentazione, ad es. this answer.

Problemi correlati