Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ejemplo:
tiene_un_hijo(X):-progenitor(X,Y).
tiene_un_hijo(X):-progenitor(X,_).
Ejemplos:
fecha(D,M,1998) = fecha(D1,mayo,A)
piloto(A,Londres) = piloto(londres,paris)
punto(X,Y,Z) = punto(X1,Y1,Z1)
f(X,a(b,c)) = f(Z,a(Z,c))
En el caso de que “?-X=Y” sea una pregunta PROLOG, puede
ocurrir varias cosas:
Definición y propiedades:
0; si x <= 10
fun(x) = 1; si 10 < x <= 20
2; si x > 20
?- f(0,Z), Z>1.
La respuesta de Prolog será false, pero para llegar a dicha conclusión el sistema
tiene que recorrer las 3 posibles ramas del árbol la función que se está calculando
tiene la siguiente estructura condicional:
si X <= 10 entonces Y = 0;
si no: si X > 20, entonces Y = 1;
si no: Y = 2.
una forma de remediar la ineficiencia anterior es utilizando el predicado de corte
como se ha indicado al principio de este apartado:
Con esta nueva versión, la respuesta de Prolog a la consulta \?- f(0,Z), Z>1." será
también \no", pero ahora, gracias a la introducción del corte en la primera regla,
el sistema sólo tendrá que explorar la primera rama del árbol
Obsérvese que una forma más cómoda para representar esta
nueva versión consistiría en, al igual que en la primera versión,
realizar la unificación directamente en la cabeza de las reglas:
maximo(X,Y,X) :- X >= Y.
maximo(X,Y,Y) :- X < Y.
maximo(X,Y,X) :- X >= Y, !.
maximo(_X,Y,Y).
pertenece(C, [C|_]).
pertenece(C, [_|R]) :- pertenece(C,R).
?- pertenece(X,[a,b,c]).
X=a?;
X=b?;
X=c?;
no
Una versión más eficiente introduciendo un corte :
pertenece(C, [C|_]) :- !.
pertenece(C, [_|R]) :- pertenece(C,R).
?- pertenece(X,[a,b,c]).
X=a?;
no