Está en la página 1de 24

Expresiones Matemáticas

Objetivos
Dar a conocer los conceptos iniciales de Inteligencia
Artificial:
• Operadores Lógicos
• Operadores Matemáticos
• Ingreso y Salidas de Datos

1
Operadores Lógicos
1 ?- consult(‘C:/test01.pl').
?- 2>3. % C:/test01.pl compiled 0.00 sec, 1,240
No bytes
2 ?- 2==2. Yes
Yes 2 ?- humano(X).
X = joao ; Test01.pl
3 ?- 2=2. X = jose ;
Yes X = jedro ;
4 ?- humanos(eva,abel). No humano(joao).
ERROR 3 ?- listing(humano).
humano(jose).
5 ?- mae(eva,abel). humano(joao). humano(jedro).
ERROR humano(jose). mortal(A):-
humano(jedro).
6 ?- 3>2. Yes
humano(A).
Yes 4 ?- listing(mortal).
7 ?- >(3,2). mortal(A) :-humano(A).
Yes Yes

2
Operadores Lógicos
?- 1 + 2 < 3 + 4. ?- 1 + X =:= 1 + 2. Comparación Aritmética Termino Literal
Yes Error Igualdad =:= ==
No iguladad =\= \==
?- a@<b. ?- 1 + 2 == 1 + 2. Inferior < @<
Yes Yes Inferior o igual =< @=<
?- 1 + 2 =:= 2 + 1. Superior > @>
?- 1 + 2 == 2 + 1.
Superior o igual >= @>=
Yes No
?- 1 + 2 = 2 + 1. ?- 1 + X == 1 + 2. Esto es un error común de inicio de
No No confusión, la comparación aritmética
?- 1 + 2 = 1 + 2. ?- 1 + a == 1 + a. (=:=), comparación literal (==), y algunas
Yes veces la unificación (=). La unificación es
Yes
una operación Lógica que encuentra
?- 1 + X = 1 + 2.
substitución en dos términos idénticos.
X=2

3
Tipos de Predicados
Termino

Predicado Condicion para que cumpla Ejemplo


Variable No Variable integer(X) X es un entero 4
var nonvar float(X) X es un flotante 4.5
number(X) X en un numero 4 4.5
atom(X) X es un atomo pepe []
Atomico
No Atómico atomic(X) X es un atomo o un número pepe 4 4.5 []
atomic compound(X) X es un termino compuesto padre(luis,juan) [3]
is_list(X) X es una lista [] [3] "3,2"
var(X) X es una variable N _
Atomo Número Lista
atom number [-|-] Otras nonvar(X) X no es una variable 1 b pepe
ground X no contiene variables [2,3] [c,d] [pepe,juan]

Entero Real
integer float

4
Tipos de Predicados
Integer: ¿Es el argumento un entero?. var: ¿Es el argumento una variable?
?- integer(3). ?- var(X).
Yes Yes
?- integer(X). ?- X = f(Z), var(X).
No No
number: ¿Es el argumento un número?. nonvar: Lo contrario de var.
?- number(3.14). ?- nonvar(X).
Yes No
float: ¿Es el argumento un numero de • compound: ¿Es el argumento un termino
punto flotante?. compound?.
atom: ¿Es el argumento un atom? No
?- atom(abc). ?- compound(f(X, Y)).
Yes Yes
?- atom(3). ground: ¿Es el argumento un termino ground?
No ?- ground(f(a, b)).
Yes
atomic:¿Es el argumento un valor atomic?,
?- ground(f(a, Y)).
ejm, ¿es a número o un atom?
No
5
Tipos de Predicados
2 ?- hormigas(X,Y),write(X),nl,fail.
1 ?- hormigas(X,Y). alho
X = alho, cebolla
Y = peixe ; tomate
X = cebolla, No
Y = peixe ; Test02.pl
X = tomate,
Y = peixe ; hormigas(alho,peixe).
No hormigas(cebolla,peixe).
hormigas(tomate,peixe).

6
Aritmética

X+Y Suma
X-Y Diferencia
X*Y Producto
X/Y Cociente
X//Y Entero
XˆY Exponenciacion

7
Suma
sumas(X,Y,Sum):-Sum is X+Y.
productos(X,Y,Product):-Product is X*Y.

Consultas:
sumas(32,54,Suma)

productos(2,4,P).

8
Funciones Aritméticas
X mod Y Modulo ,Ejm 2 =:= (17 mod 5) ó 2 is (17 mod 5)
abs(X) Absoluto
exp(X) Exponencial
ln(X) Logarithm Natural.
log(X) Logaritmo Base 10,
sqrt(X) Raiz de X.
round(X) El entero proximo.
truncate(X) Trunca enteros hacia el cero
sin(X) Seno.
cos(X) Coseno.
tan(X) Tangente
atan(X) Arcotangente
random(X) Evalua un valor entero i; 0 <=i<X.

9
Ingreso y Salida de Variables

Predicado de Ingreso:
consult(Archivo).
read(X)

Predicados de Salida:
nl ()
write(X)
print(X).

10
Ejemplo 1
accion(1):-write('el numero es uno.').
accion(2):-write('el numero es dos.').
accion(3):-write('el numero es tres.').
accion(N):-N\=1,N\=2,N\=3,write('no existe.').

Consulta:
%write('ingrese un numero entre: 1 a 3
:'),read(N),accion(N).

11
Ejemplo 2
positivo(X):-X>0.
negativo(X):-X<0.
numero(X,Y):- M is (X-Y),positivo(M),
write('X es el número máximo :'),
write(X),nl.
numero(X,Y):- M is (X-Y),negativo(M),
write('Y es el número máximo :'),
write(Y),nl.

12
Operaciones usando reglas con
Recursividad
Recursividad
Objetivos
Realizar ejercicios de recursividad:
• Utilizar la recursividad en Prolog.
Divisibilidad
1 ?- divide(2,X),divide(3,X).
¿2 divide a 6?
X=6;
¿3 divide a 12?
X = 12
¿Cuáles son los múltiplos de 27?
no
¿Cuáles son los múltiplos de 6?
¿Cuáles son los elementos X e Y tales que X divide a Y?

divide(2,6).
divide(2,12).
divide(3,6).
divide(3,12).
Divisibilidad
1 ?- divide(6,X). X = 2,
X=6; Y=6;
X = 12 ; X = 2,
divide(6,X)
Y = 12 ;
No
X = 3,
2 ?- divide(X,Y). Y=6; divide(2,X),divide(3,X).

divide(2,6). X = 3, [1] x=6 [2] x=12


divide(2,12). Y = 12 ;
divide(3,6). divide(3,12).
divide(3,6). X = 6,
divide(3,12). Y=6;
divide(6,X):- X = 6,
Y = 12
divide(2,X),divide(3,X).
No
nat(0).
nat(s(X)):-nat(X). Recursividad
1 ?- nat(s(s(0))). nat(X0).
Yes X0=0 N0=S(X1)
2 ?- nat(dos).
nat(0) nat(X1)
No
X1=0 X1=S(X2)
3 ?- nat(X).
X=0; nat(0) nat(X2)

X = s(0) ; X2=0 X2=S(X3)


X = s(s(0)) ; nat(0) nat(X3)
nat(0) nat(s(X)) X = s(s(s(0))) ;
X = s(s(s(s(0)))) ; …. ….
nat(X).
X = s(s(s(s(s(0))))) ;
X = s(s(s(s(s(s(0)))))) ;

Suma y Exponente
Sumar los n primeros números.

suma(0,1):-!.
suma(N,R):-N>0,M is(N-1),suma(M,S),R is (S+N).
%suma(5,T).
Suma y Exponente
expo(_,0,1):-!.
expo(A,N,R):-N>0,M is(N-1),expo(A,M,S),R is (S*A).
%expo(5,3,T).

facto(0,1):-!.
facto(N,R):-N>0,M is(N-1),facto(M,S),R is (S*N).
%R=(S*N)
%facto(5,N).
Ejercicios
• Hacer un programa que imprima n veces “hola mundo”
• Hacer un programa que imprima los números del 1 al
n-esimo.
• Calcular la suma de los números y detener al ingresar el 0.
• Un robot quiere identificar si un bloque esta arriba de otro.

E
B F
C D
A Mesa Y

Mesa X
Listas
Dados de una Lista [a, b, c, d]:
• [a, b, c] es equivalente a [a|[b, c]]
• [a|[b,c]] es equivalente a [a|[b|[c]]]
• el cual es equivalente a [a|[b|[c|[]]]]
Lista

a Lista

b Lista

c []
21
Operaciones Básicas
visualizar([]).
visualizar([H|T]):- write(H),nl, visualizar(T).
%visualizar([1,2,3]).

leer([H|T]):-
write(‘ingrese un dato’),read(H),H\=0,!,leer(T).
Leer([]).

22
Operaciones Básicas
buscar(D,[D|_]).
buscar(D,[_|T]):- buscar(D,T).
%buscar(susan,[ian,susan,john]).
%buscar(‘susan’,*‘ian’,’susan’,’john’+).

longitud([], 0).
longitud([_|T],L):- longitud(T,M),L is M + 1.
%longitud([1,2,3],L).

23
Tarea
• Hacer un programa que permita ingresar datos
numéricos hasta ingresar el número cero y calcular la
suma
• Hacer un programa que permita ingresar datos
numéricos a una lista hasta ingresar el número cero y
calcular la suma

24

También podría gustarte