Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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).
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