2009-09-14 10 views

Respuesta

3

Perdóname si me da la sintaxis incorrecta, pasado un tiempo desde que jugué con Prolog.


Una solución típica es introducir otro nivel a las cláusulas, así:

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

y especificando las relaciones mediante la cláusula esposa en su lugar:

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

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

Más información se se encuentra aquí: CSc 8710, Deductive Databases and Logic Programming, chapter 6 - Logic and databases, en 6.5 - Relaciones especiales.

1

Según entiendo, el problema básico es que si se permite que las definiciones circulares, aunque el lenguaje resultante es auto-consistente, no puede haber consecuencias sutiles que suelen ser contrario a la intuición. También hay consideraciones de eficiencia (las definiciones circulares incurren en gastos adicionales).

ver este detailed discussion para las porciones más explicación y un buen número de puntos de vista diferentes.

1

Una posible solución es usar presentación, véase, por ejemplo this answer.

Cuestiones relacionadas