Prolog - Predefinidos PROGRAMACIÓN EXPLORATORIA CONSTRUCCIÓN DE PREDICADOS O CONSULTAS Term1 , Term2 (and) Term1 ; Term2 (or) call(+Term) call(f(a,X)) = f(a,X) 1 VERIFICACIÓN DE TIPOS DE TÉRMINOS var(+Term) ?- var(X). Yes ?- var(123). No ?-X=Y, Y=23, var(X). No VERIFICACIÓN DE TIPOS DE TÉRMINOS nonvar(+Term) -Tiene éxito si Term NO es una variable libre -Es el opuesto del predicado var(X). plus(X,Y,Z) :- nonvar(X), nonvar(Y), Z is X+Y. plus(X,Y,Z) :- nonvar(X), nonvar(Z), Y is Z-X. plus(X,Y,Z) :- nonvar(Y), nonvar(Z), X is Z-Y. 2 VERIFICACIÓN DE TIPOS DE TÉRMINOS atom(+Term) ?- atom(13). No ?- atom(‘Programación Exploratoria’). Yes ?- atom([1,2,3|[X]]). No ?- atom(X). No VERIFICACIÓN DE TIPOS DE TÉRMINOS integer(+Term) - si Term representa a un entero. 3 VERIFICACIÓN DE TIPOS DE TÉRMINOS atomic(+Term) atomic(X) :- integer(X). atomic(X) :- atom(X). ANÁLISIS Y CONSTRUCCIÓN DE TÉRMINOS functor(?Term,?Functor,?Arity) ?- functor(f(a,b,g(Z)),F,N) Yes Z=_23, F=f, N=3 ?- functor(a+b,F,N). Yes F=+, N=2 ?- functor([a,b,c,d],F,N). Yes F=‘.’, N=2 ?- functor(javaprolog,F,A). Yes F=javaprolog N=0. 4 ANÁLISIS Y CONSTRUCCIÓN DE TÉRMINOS arg(+Arg,+Term,?Value) ?- arg(2,app(a,b,c),V). Yes V=b ?- arg(2,[a,b,c],V). Yes V=[b,c] ?- arg(2, a+(b+c), V). Yes V=‘+’(b,c) ANÁLISIS Y CONSTRUCCIÓN DE TÉRMINOS name(+Term,?List) ?- name(apple, X). Yes X=[97,112,112,108,101] ?- name(apple, [97, 112, 112, 108, 101]). Yes 5 IGUALDAD ?Term1 = ?Term2 ?Term1 \= ?Term2 ?Term1 == ?Term2 (más restrictivo que “=“) ?Term1 \== ?Term2 (más restrictivo que “\=“) COMPARACIÓN DE NÚMEROS +Integer1 = +Integer2 +Integer1 \= +Integer2 +Integer1 < +Integer2 +Integer1 =< +Integer2 +Integer1 > +Integer2 +Integer1 >= +Integer2 6 ARITMÉTICA ENTERA +Integer1 + +Integer2 +Integer1 - +Integer2 +Integer1 * +Integer2 +Integer1 / +Integer2 +Integer1 mod +Integer2 ?Integer is +Term -- term debe ser aritméticamente evaluable 7