siguiente arriba atrasadelante (solo si previamente se ha ido atras)

A.5.1. Diferencias sintácticas

Está claro que los «hechos» de Prolog son literales positivos, y que las «reglas» son sentencias condicionales cerradas. Aparte de diferencias sintácticas menores (inversión del orden de colocación del antecedente y el consecuente, uso de «:-» en vez de «==>» y de «,» en vez de  /\ ), la principal diferencia es que las reglas de Prolog son cláusulas de Horn con cabeza (Apartado 3.8.6). Hemos visto que una cláusula cualquiera

¬p1  \/ ¬p2  \/ ...  \/ ¬pk  \/ q1  \/ q2  \/ ...  \/ qm

puede escribirse en forma de condicional:

p1  /\ p2  /\ ...  /\ pk ==> q1  \/ q2  \/ ...  \/ qm

pero esto, en principio, no puede expresarse en Prolog (las reglas no admiten la operación de disyunción en la cabeza). Puede hacerse si en el cuerpo (el antecedente del condicional) se admiten literales negativos. En efecto, sentencias equivalentes a la anterior son también:

p1  /\ p2  /\ ...  /\ pk  /\ ¬q2  /\ ¬q3  /\ ...  /\ ¬qm ==> q1

p1  /\ p2  /\ ...  /\ pk  /\ ¬q1  /\ ¬q3  /\ ...  /\ ¬qm ==> q2

a las que corresponden las reglas:

q1 :- p1,p2,...,pk, not q2, not q3,..., not qm

q2 :- p1,p2,...,pk, not q1, not q3,..., not qm

(todas ellas diciendo lo mismo, aunque no lo parezca). Ya hemos visto (Apartado A.1.3) que en Prolog es posible utilizar una operación, «not» , parecida a «¬» , pero, como veremos, tiene otra semántica, por lo que «not p» y «¬p» no son en absoluto equivalentes.


siguiente
arriba atrasadelante (sólo si previamente se ha ido atras)


algunos derechos reservados DIT-ETSIT-UPM
Portada