Você está na página 1de 42

EQUIPO 2

ALUMNOS:
BAOS MONTIEL JOS CARLOS
GUZMN PREZ CARLOS ALFREDO
LARA CARRERA MARIA DE LOURDES
RIZO ZARAGOZA VECTOR
VELASCO QUIROZ DANIEL

Aritmtica:
El operador is.
Operadores aritmticos estndar.
Comparacin de enteros y expresiones enteras.
Ejercicio
Smbolo de corte CUT
Ejercicio
La recurrencia en PROLOG.
Recurrencia aritmtica
Ejercicio

Temas:

En este capitulo se vern tres caractersticas del
lenguaje PROLOG
Aritmtica
Smbolo CUT
Recurrencia
Estas caractersticas son mutuamente independientes.
Introduccin

Operadores
El operador is
Sustituye al signo = de la aritmtica
As siempre se lograran las metas :
Hombre = Hombre
3=3
En tanto que
Hombre = Mujer
3=4
La expresin:
A is B-1 es asignacin }}}}}}}}}}}}}}
A is B*C es equivalente a A = B x C




Suma +
X is 3+6
X is Y+Z
X is Y+Z+2

Resta -
X is 5-3
X is Y+Z-5
X is


Operadores aritmticos
estndar

Multiplicacin *
X is 2*3
X is Y*3

Divisin /
X is 15/5 exacta y X is 16/5 con residuo
X is 16/5. Y is mod 5

Uso de mas de un operador
X is ((A*B)/C)+D



Operadores aritmticos
estndar

IGUALDAD

Para comprobar igualdades se usa el operador del
sistema =:=

X + Y Z =:= 3


La igualdad se cumplira si por ejemplo X=1, Y=4,
Z=2

DESIGUALDAD

Se utiliza el operador =/= y tendr xito si las
expresiones enteras no son iguales.

X=/= 3+5

En caso que X no tenga valor de 8


RELACIONES MAYOR
QUE Y MENOR QUE
ENTRE EXPRESIONES
DADAS

Para comprobar si un numero entero se utiliza el
smbolo matemtico >, mayor que.


Aunque tambin dependiendo de la comparacin se
puede utilizar el smbolo >= representa la relacin
mayor o igual que.

EJERCICIO
Escribir un programa en Prolog para obtener el
resultado de dividir un entero entre otro, en la forma
X residuo Y

Existen dos diferentes formas para resolver este
ejercicio dependiendo si se utilizan enteros (DEC-10)
o nmeros reales.


EJERCICIO 6
Para nmeros enteros
Dividir (A,B,X,Y):-X is A/B, Y is A mod B.


Para nmeros reales:
Dividir (A,B,X,Y):-X is A//B, Y is A mod B




EJERCICIO 6 (2)

Escribir un programa en Prolog para calcular el
promedio de dos nmeros:

Promedio (X,Y,A):- A is (X+Y) /2



Se representa con el smbolo: !
Es un predicado integrado al lenguaje.


El operador de corte ! lo que hace es limitar la
vuelta-atrs backtracking. Cuando se ejecuta elimina
todos los puntos de backtracking anteriores dentro
del predicado donde est definido.

CUT !

PROLOG intenta tener xito en las metas e involucra
lo que es el proceso de regresin. Pero cuando se
incluye el smbolo de corte como integrante de la
definicin de una meta, impide la ruta que sigue
PROGLOG para satisfacer la meta.

VENTAJA: Para aumentar la eficiencia. Se eliminan
puntos de backtracking que se sabe que no pueden
dar ninguna solucin.
!

progenitor(juan).
progenitor(alfredo).
progenitora(juana).
varon(juan).
varon(alfredo).
mujer(juana).
padre(X):-progenitor(X), varon(X),!.

PROBAR: ?- padre(x).



SIN SIMBOLO CUT:



CON SIMBOLO CUT: (ejercicio)


madre(X):-progenitora(X),!, mujer(X).

El corte impide que se genere cualquier solucin:

X= Juana
Falla mujer(X).
Como conclusin falla madre(X)
Descripcin y uso

RECURRENCIA
Es una tcnica bastante utilizada en la mayora de
los lenguajes de programacin.

Consiste en el ahorro y reutilizacin de cdigo
para simplificar funciones que son redundantes en
el programa.

Recurrencia en PROLOG
El lenguaje PROLOG es muy apto para aplicar
dicha tcnica, y si se domina, amplia el poder y las
acciones que se pueden realizar en PROLOG.

El principal aspecto para ensamblar la recurrencia
en el lenguaje es DEFINIR UN PREDICADO EN
TRMINOS DE EL MISMO.

Ejemplo
Se supone que se quiere averiguar el linaje, es decir,
los ancestros de un caballo.

Se tiene que el caballo Secreto fue procreado por
Neartic, a la vez el fue procreado por Nearco y a la
vez este fue procreado por Nasrullah.

Solucin (NO
recurrente)
progenitor (secreto, neartic).
abuelo(secreto, nearco).
bisabuelo (secreto,
nasrullah).
ancestro(X,Y):-padre(X,Y)
ancestro(X,Y):-abuelo(X,Y).
ancestro(X,Y):-bisabuelo(X,Y).

Desventajas
Como se pudo observar, se pueden elaborar un gran
nmero de instancias y relaciones para la solucin,
pero implicara el uso de un aspecto mal visto por los
programadores: EL USO DE CDIGO DURO.

Otra desventaja es que se vuelve tediosa y repetitiva
la programacin.

Solucin (Recurrente)
progenitor(secreto, neartic).
progenitor(nijinsky, neartic).
progenitor(neartic, nearco).
progenitor(nearco, nasrullah).
ancestro(X,Y):-progenitor(X,Y).
ancestro(X,Y):-progenitor(X,Z), ancestro(Z,Y).



Descripcin de la
Solucin
En el anterior programa se usan 2 relaciones: La
primera es la relacin bsica de que un progenitor
es un ancestro.

En la segunda relacin se usa la recurrencia,
diciendo que si el progenitor de X es Z y el
ancestro de Z es Y, entonces el ancestro de X es Y.

Resultados
Como se pudo
visualizar el cdigo es
flexible, y se pueden
agregar nuevas
instancias como un
hermano de Secreto, el
cual fue Nijinsky, as
que optimizamos el
programa por medio de
la recurrencia.

Calculo del factorial de un numero

fac(0,1),
fac(X,Xf):-Y is X-1,
fac(Y, Yf),
Xf is Yf * X,

fac(0,1) Condicion a la frontera


Calculo factorial de 0
Evitar que la rutina recurra a numeros negativos

Escriba reglas adicionales a la siguiente base de
conocimientos para poder definir ancestros.

padres (jaime, juan, elena),
padres (juan, guillermo, doris),
padres (elena, frain, alma),
padres (guillermo, jos, flor),
padres (doris, alberto, sonia),
padres (efran, crispin, claudia),
padres (alma, ruperto, alicia),
Ejercicio 8

Primero un predicado para progenitor

progenitor (X, Y):-padres(X, Y, _).
progenitor (X, Y):-padres(X, _, Y).

Regla recurrente que define a ancestro:

ancestro (X, Y):- progenitor (X, Y).
ancestro (X, Y):- progenitor (X, Z), ancestro (Z, X).


La expresin matemtica N c R se obtiene como sigue:
Dividir el factorial de N entre el producto del factorial de
R y el factorial de ( N-R ).

factorial (0, 1):-!.
factorial (N, Nf):- R is N-1,
factorial (R, Rf),
Rf is N*Rf.
combinar (N, R, C):- factorial (N, Nf),
factorial (R, Rf),
X is N-R,
factorial (X, Xf),
C is Nf/(Xf*Rf).

Escribir un programa para calcular el valor de XN ,
donde X y N son valores enteros.

exp ( X, 0, 1):-!.
exp (X, N, E):-R is N-1,
exp (X, R, Er),
E is Er*X.

En Prolog existen ciertos operadores para hacer comparaciones
entre enteros los cuales pueden ser similares a los usados en
matemticas o incluso dependiendo el operador puede variar el
resultado.

El smbolo de corte CUT es un predicado que ayuda a eliminar las
vueltas-atrs con el propsito de ser un sistema ms rpido ya que
en ocasiones la regresin ocupa tiempo para soluciones que no
existen.

La recurrencia bsicamente nos sirva para poder reducir cdigo
para varios tipos de programas como puede ser, querer saber algo
sobre el rbol genealgico de alguna persona adems se puede
usar en las matemticas como es calcular el exponencial de
nmeros, el factorial de algunos nmeros, entre otros problemas.

Conclusiones

LIBRO: prolog. Programacin y Aplicaciones
D. BRNHAM.
EDITORIAL LIMUSA.
ISBN 968-18-3012-1

Bibliografa