Buscar..


Disyunción (OR lógica), implícita vs. explicta.

Prólogo intenta cláusulas alternativas para un predicado en el orden de aparición:

likes(alice, music).
likes(bob, hiking).

// Either alice likes music, or bob likes hiking will succeed.

El operador de disyunción (OR) ; se puede utilizar para expresar esto en una regla:

likes(P,Q) :-
    ( P = alice , Q = music ) ; ( P = bob , Q = hiking ).

Los paréntesis son importantes aquí para mayor claridad. Ver esta cuestión en precedencia relativa para la combinación , y la disyunción ; .

Conjunción (lógica AND)

La conjunción (AND lógico) está representada por la coma , operador (entre otros roles).

Conjunción entre cláusulas puede aparecer en una consulta:

?- X = 1, Y = 2.

La conjunción también puede aparecer entre las cláusulas de subgoal en el cuerpo de una regla:

triangleSides(X,Y,Z) :-
    X + Y > Z, X + Z > Y, Y + Z > X.

Cortar (eliminar puntos de elección)

A veces es conveniente evitar que Prolog retroceda a soluciones alternativas. La herramienta básica disponible para el programador para evitar que el prólogo continúe en su retroceso es el operador de corte. considera lo siguiente.

% (percent signs mean comments)
% a is the parent of b, c, and d.
parent(a,b).
parent(a,c).
parent(a,d).

Aquí el predicado parent/2 tiene éxito más de una vez cuando

?- parent(a,X).

se llama. Para evitar que el prólogo busque más soluciones después de que se encuentre la primera, usaría el operador de corte, así.

?- parent(a,X), !.

Esto tendrá X igual a b (ya que es la primera solución posible) y no busque más soluciones.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow