Programación Exploratoria

Anuncio
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
Descargar