Prolog Language
Estructuras de Control
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.