You are on page 1of 20

Tutorial de Prolog

Universidad Pedaggica Nacional


Francisco Morazn
PREUFOD

Licenciatura en Informtica Educativa

Tutorial Bsico sobre Prolog

Catedrtico: Ing. Ricardo A. Lpez

Integrantes del grupo 1 Seccin A Juticalpa

Jos Ral Castillo Rosales


Miguel Angel Nez

9110053

0801198016335
Carlos Marcial Torres
0714198100906

Tegucigalpa M. D.C. Agosto 2012

Inteligencia Artificial

PREUFOD

JUTICALPA

Pgina 1

Tutorial de Prolog

INTRODUCCION

A finales de la dcada de los aos cincuenta, las computadoras se usaban


principalmente para tareas de procesamiento de nmeros, como calcular trayectorias
de misiles, tabular datos de censos y procesar nminas.
Unos cuantos cientficos computacionales visionarios fueron ms all de estas
aplicaciones limitadas de procesamiento de nmeros y empezaron a explorar maneras
en que las computadoras pudieran tomar decisiones y resolver problemas al manipular
datos que no eran numricos, incluidos palabras y conceptos. Los lenguajes de
programacin procedurales, como FORTRAN y cobol, no tenan flexibilidad para tratar
eficientemente con datos numricos, de modo que se desarrollaron nuevos lenguajes
de programacin, como LISP, Scheme y prolog.
Es posible agrupar estos lenguajes no procedurales en dis nuevos paradigmas,
funcional y declarativo en donde el paradigma funcional pone nfasis en la evaluacin
de las expresiones, llamadas funciones, en lugar de la ejecucin de comandos.
El paradigma declarativo trata de describir un problema sin especificar exactamente
como llegar a una solucin.

Inteligencia Artificial

PREUFOD

JUTICALPA

Pgina 2

Tutorial de Prolog

Qu es lo distintivo del paradigma declarativo?


Describe aspectos de un problema que llevan a una solucin o sea una descripcin del
problema, mientras que el procedural se concentra en un algoritmo que describe la
solucin.
Lenguaje Prolog
Al contrario que la mayora de los lenguajes de programacin, Prolog es un lenguaje
conversacional; es decir, el sistema Prolog mantiene un dilogo continuo con el
programador desde el inicio de la sesin hasta el final de la misma. Este dilogo toma
generalmente la forma de un interrogatorio, a lo largo del cual el programador plantear
preguntas al sistema Prolog.
Por su parte, el sistema Prolog responder cada una de las preguntas formuladas por el
programador en la medida en que esto sea posible.
Prolog le indica al programador que est esperando a que ste le formule una pregunta
mostrando en pantalla el siguiente smbolo ?- .
Tras este smbolo, el programador puede teclear una pregunta (terminada en un punto)
y pulsar el retorno de carro. Con ello, el programador solicita al sistema Prolog que
responda a la pregunta recin formulada. Una vez procesada la pregunta el sistema
Prolog mostrar en pantalla la respuesta correspondiente.
Por ejemplo, si queremos preguntar a Prolog si 5 es igual a 2+3 podemos teclear la
pregunta
?- 5 is 2+3.
Yes

Inteligencia Artificial

PREUFOD

JUTICALPA

Pgina 3

Tutorial de Prolog
Despus de pulsar el retorno de carro, Prolog comprobar que efectivamente 2 y 3
suman 5 y, por lo tanto, responder afirmativamente (Yes). Prolog puede dar tambin
respuestas negativas a las preguntas
?- 1 is 1+1.
No
Es importante recordar que todas las preguntas formuladas a Prolog deben
terminar en un punto. Si se olvida incluir el punto, por ms veces que se presione
retorno de carro, Prolog considerar que la pregunta no est formulada en su totalidad
y, por lo tanto, seguir esperando a que se termine de formular la pregunta. Por
ejemplo, si olvidamos teclear el punto en la pregunta
?- 5 is 2+3
|
Prolog mostrar el smbolo |, indicando que est esperando a que se termine de
formular la pregunta, para lo que basta teclear un punto seguido de un retorno de carro
?- 5 is 2+3
|.
Yes
Tambin es posible que cometamos algn error al teclear una pregunta. Como veremos
ms adelante, las preguntas son realmente trminos Prolog y deben ajustarse a una
sintaxis formal concreta. Si la pregunta en cuestin no es un trmino Prolog correcto,
habremos cometido un error sintctico. Afortunadamente, Prolog es capaz de detectar
tales errores y nos avisar que no entiende la pregunta formulada.

Inteligencia Artificial

PREUFOD

JUTICALPA

Pgina 4

Tutorial de Prolog
Hechos de Prolog.
Ejemplo : El primer paso en la codificacin del programa consiste en ingresar hechos
que describan los precios, formas y tamaos de dos pizzas. El hecho La forma de una
pizza es redonda, se codificara en Prolog de la siguiente manera:
formade (pizza,redonda).
Las palabras entre parntesis se denominan argumentos. Un argumento representa
uno de los temas principales que describe un hecho. La palabra fuera de los parntesis,
llamada predicado, describe la relacin entre los argumentos. En otras palabras el
predicado formade describe la relacin entre pizza y redonda

Un hecho empieza
con una letra
minscula

Los argumentos se
colocan entre
parntesis

Cada hecho
termina con un
punto

formade(pizza,redonda).

Use minsculas para


los argumentos, a
menos que sean
variables

Inteligencia Artificial

PREUFOD

Use una coma para


separar los
argumentos

JUTICALPA

Pgina 5

Tutorial de Prolog
Aunque parezca obvio que redonda describe la forma de una pizza, no es posible
omitir el predicado. En muchos casos, ste puede cambiar drsticamente el significado
de

un

hecho.

Por

ejemplo,

los

siguientes

hechos

tienen

los

mismos

argumentos(joe,pescado). Pero el predicado les da diferentes significados.


Odia(joe,pescado).

Joe odia el pescado.

Nombre(joe,pescado)

Joe es el nombre de un pescado.

Juegocartas(joe,pescado)

Joe se dedica a jugar cartas.

En caso del programa de pizza es posible usar una serie de hechos para describir una
pizza
Preciode (pizza1, 10)
Tamaode (pizza1, 30)
Formade (pizza2, redonda)
Los hechos pueden tener ms de dos argumentos. Por ejemplo, uno solo pude usarse
para describir por completo una pizza:
Preciotamaoforma (pizza1, 10, 30, cuadrada)
El uso de una serie de hechos para describir una pizza tiene unas ventajas y
desventajas.
Sobre el uso de un solo hecho para describir una pizza. Un solo hecho tiende a hacer
que un programa sea ms compacto, mientras que muchos hechos tienden a
proporcionar ms flexibilidad a la estructura de un hecho tambin afecta la sintaxis de
objetos que producen informacin.
Qu es un objeto? Es un programa de Prolog, los hechos son tiles aunque no haya
reglas Prolog puede manipular los hechos de varias maneras sin programacin
explicita. Cada hecho es similar a un registro de una base de datos. Puede consultar la
Inteligencia Artificial

PREUFOD

JUTICALPA

Pgina 6

Tutorial de Prolog
base de datos del programa al plantear una pregunta, llamada Objetivo en
terminologa de Prolog, suponga que ha ingresado los siguientes hechos:
Preciode (pizza1, 10)
Tamaode (piza1, 30)
Formade (pizza1, cuadrada)
Preciode (pizza2, 12)
Tamaode (pizza2, 35)
Formade (pizza2, redonda)
Usted puede plantear preguntas al ingresar objetos desde el indicador?-. Por ejemplo,
el objetivo? - formade (pizza1,cuadrada) significa es cuadrada

la pizza1? Prolog

busca ente los objetos para ver si satisface el objetivo de encontrar una coincidencia. Si
la encuentra Prolog responde si; de otra manera responde no. Este ejercicio parece
trivial porque est trabajando con un conjunto pequeo de hechos.,que estn visibles
por complemento en la pantalla. Sin embargo, muchos programas contienen cientos de
hechos, que no se despliegan en una sola pantalla; y tampoco le es tan fcil recordarlos
a un programador.
Prolog le permite plantear preguntas de final abierto al remplazar constantes con
variables. Una

Constante, como pizza1,cuadra o 10, representa una valor o

atributo sin cambio. Una variable de Prolog es como un marcador de posicin o un


recuadro vaco en Prolog empieza con una letra mayscula para distinguirla de una
constante. El argumento PIZZA

es una variable,

mientras que pizza1 es una

constante. El argumento Centmetros es una variable, mientras que 35 es una


constante.
Las variables de Prolog son Herramientas prcticas para formular objetivos de final
abierto. Como ejemplo, suponga que quiere encontrar al tamao de pizza2. Obtendr
esta informacin al usar la variable Centmetros en el Objetiv ?- tamaode (pizza2,
Centmetros).

Inteligencia Artificial

PREUFOD

JUTICALPA

Pgina 7

Tutorial de Prolog
Prolog busca cualquier hecho que tenga tamao de como predicamento y pizza2 como
primer argumento. Responde con el valor real del segundo argumento:
Centmetros=35
Gran parte de la capacidad y flexibilidad del lenguaje Prolog surge de su capacidad de
recorrer hechos tratando de equipar los predicados, comparar las constantes y asignar
valores a variables.
Qu es instanciacin? Al proceso de encontrar un valor para una variable se le
denomina instanciacin. Para resolver el objetivo? tamao(pizza2,centmetros),
prolog instancia el valor 35 a la variable centmetros. Instanciacin significa hacer una
asignacin temporal. Cuando un programa de Prolog descubre que el tamao de pizza2
es de 35 centmetros
Prolog puede realizar varias instanciaciones. Para preguntar el tamao de las pizzas
empleara la consulta ?- tamaode(Pizza,Centmetros). Las palabras Pizza y centmetro
se colocan en maysculas porque ambas son variables. Prolog puede instanciar Pizza
a pizza y luego a pizza2:
Pizza=pizza1
Centmetros=30
Pizza=pizza2
Centmetros=35

Tambin puede formular consultas en las que indica a Prolog que no instancie una
variable. Por ejemplo, suponga que quiere conocer los precios de las pizzas, pero no
necesita saber cul precio corresponde a la pizza determinada. Ingresara la
consulta

?- preciode(,Prec) que significa Cules son los precios? Prolog

respondera:

Inteligencia Artificial

PREUFOD

JUTICALPA

Pgina 8

Tutorial de Prolog
Precio=10
Precio=12
La instanciacin se usa tambin para producir informacin que no est implcitamente
almacenada en la base de datos. Suponga que quiere conocer el tamao de la pizza
redonda. La base de datos no contiene un hecho como tamaodepizzaredonda(35); sin
embargo, puede usar un conjunto de dos objetivos, para obtener el tamao de su
pizza.

La instanciacin es una clave para comprender el funcionamiento de Prolog. A


diferencia de un lenguaje de programacin procedural, que est diseado para recorrer
una serie de declaraciones en una ruta preestablecida por el programador, Prolog
ejecuta de manera autnoma cada posible instanciacin, haciendo un recorrido hacia
atrs, si es necesario, para tratar con mltiples variables. Rastreo hacia atrs es un
proceso en que se prueban todas las soluciones posibles.
Si usted imagina que las solucione son como ramas de rbol, el rastreo hacia atrs
empieza por seguir una rama en busca de una solucin. Si no se encuentra sta, se
regresa al tronco y se sigue otra rama. Por ejemplo, el rastreo hacia atrs permitir que
el programa Prolog analice

cada posible movimiento de un juego de ajedrez. La

instanciacin y el rastreo hacia atrs son herramientas poderosas cuando las usan los
programas inteligentes. Funcionan en el contexto de los hechos y las reglas de Prolog.
Echemos un vistazo a la manera en que un programador codifica reglas de Prolog;
luego, veremos cmo funcionan estas reglas.

Inteligencia Artificial

PREUFOD

JUTICALPA

Pgina 9

Tutorial de Prolog
REGLAS DE PROLOG
De qu manera un programador codifica las reglas Prolog ? El programa de pizza
requiere una regla que establezca: Una pizza es una mejor oferta si su precio por
centmetro cuadrado es menor que el precio por centmetro cuadrado de otra pizza.
Traducida a Prolog, esta regla se vuelve:
Mejoroferta (PizzaX, PizzaY) :preciocentmetrocuadrado (PizzaX, MontoX),
peciocentmetrocuadrado (PizzaY, MontoY),
MontoX < MontoY.
Echemos un vistazo a la lgica detrs de la regla. Una regla de Prolog est integrada
por encabezado, cuerpo y smbolos de conexin, como se describe a continuacin:
Mejoroferta(X, Y)
preciocentimtrocuadrado(PizzaX,MontoX);
preciocentmetrocuadrado(PizzaY,MontoY),
MontoX <MontoY.
Cmo funcionan las reglas de Prolog? Para comprender la manera en que funciona
la regla mejoroferta, necesitamos realizar un poco de magia para determinar el precio
por centmetro cuadrado de cada pizza. En el programa de pizza completo, la
computadora calcula el precio por centmetro cuadrado empleando una regla
proporcionada por el programador. Debido a que an no tenemos esa regla.
Suponemos temporalmente que el precio por centmetro cuadrado de la primera pizza
es de 0.0111 (1.11Centavos) y el de la segunda es de 0.0097 (0.97 Centavos).

Inteligencia Artificial

PREUFOD

JUTICALPA

Pgina 10

Tutorial de Prolog
Estos primeros se estableceran como :
preciocentmetrocuadrado(pizza1,0.0111). Y preciocentmetrocuadrado(pizza2,0.0097).
Ahora suponga que ingresa la consulta ?- mejoroferta(pizza1,pizza2)., que se traduce
como La pizza1 es mejor oferta que la pizza2? A continuacin se ilustra la manera
en que Prolog usa la regla mejoroferta para responder su consulta.
Hechos del programa de
pizza

Preciode(pizaa1,19).
Tamaode(pizza1,30).
Formade(pizza1, cuadrada).
Preciode(pizza2,12).
Tamaode(pizza2,35).
Formade(pizza2, cuadrada).
Preciocentimetrocuadrado(pizza1,0.0111).
Preciocentimetrocuadrado(pizza2,0.0097).
La regla
mejorada

Mejoroferta(Pizzax,PizzaY) :Preciocentimetrocuadrado(PizzaX,MontoX)
Preciocentimetrocuadrado(PizzaY,MontoY)
La
consulta

?- MejorOferta(pizza1,pizza2)
1. Prolog asigna a PizzaX el valor pizza1, y a pizzaY el
valor pizza2

Mejoroferta(pizza1,pizza2):Preciocentimetrocuadrado(pizza1; MontoX)
Preciocentimetrocuadrado(pizza2,MontoY)
MontoX < MontoY
Inteligencia Artificial

PREUFOD

JUTICALPA

Pgina 11

Tutorial de Prolog
2. Prolog busca entre los hechos para encontrar el
preciocentimetrocuadrado de pizza1y pizza2. Estos precios son
instanciados MontoX y MontoY

Mejoroferta(pizza1,pizza2):Preciocentimetrocuadrado(pizza1,0.0111)
Preciocentimetrocuadrado(pizza2,0.0097)
0.0111< 0.0097
La lnea anterior contiene una declaracin que no es verdadero (0.0111 < 0.0097), que
invalida la regla y produce no como respuesta a su consulta $es la pizza1 mejor
oferta que la pizza2?
El orden de las reglas afecta la manera en que se ejecuta el programa Prolog ?
Cuando se codifican programas en un lenguaje procedural, como Pascal o BASIC, el
orden de las instrucciones del programa fundamental. Por ejemplo, si coloca las
declaraciones de ingresos del tamao y precio de la pizza despus del cdigo que
calcula el precio por centmetro cuadrado, el programa produce error.
En contraste, el orden o la secuencia de las reglas en un programa de pizza completo
en Prolog usa cuatro reglas. Una describe la manera de determinar la mejor oferta.
Otras dos describen las reas de la pizza cuadrada y la redonda. Y una regla final
describe la manera en que se relaciona el precio por centmetro cuadrado con el rea y
el precio de una pizza.

Las cuatro reglas del programa de pizza pueden aparecer en cualquier orden aun
producir el resultado correcto.
La regla mejoraoferta determina el precioX es
menos cara que pizzaY

mejoroferta(PizzaX, PizzaY) :preciocentimetrocuadrado(PizzaX,Monto1),


preciocentimetrocuadrado(PizzaX,Monto2),
Monto1 < Monto2.
Inteligencia Artificial

PREUFOD

JUTICALPA

Pgina 12

Tutorial de Prolog
La regla rea calcula el rea de la
pizza cuadrada

rea(Pizza, Centimetroscuadrados);
tamaode(Pizza, Lado),
formade(Pizza, cuadrada),
Centrimetroscuadrados es Lado * Lado.
La regla rea calcula el rea de la
pizza redonda

rea(Pizza, Centimetroscuadrados) :tamao(Pizza, Dimetro),


formade(Pizza, redonda),
Radio es Diametro / 2
Centimetroscuadrados es 3.142 * (Radio * Radio).
La regla preciocentimetrocuadrado calcula el precio por centmetro
cuadrado de la pizza

preciocentimetrocuadrado(Pizza,Monto)
rea(Pizza, Centimetroscuadrados),
preciode(Pizza, dlares),
Monto es dlares / Centimetroscuadrados.

Inteligencia Artificial

PREUFOD

JUTICALPA

Pgina 13

Tutorial de Prolog
Cul es el aspecto del programa de pizza completo en Prolog? Este incluye los
hechos que describen las dos pizzas y las reglas que describen la mejor oferta, el
precio por centmetro cuadrado y el rea.
El programa de Prolog completo.
Preciode (pizza1, 10).
Tamaode(pizza1, 30).
Formade(pizza1, cuadrada).
Preciode(pizza2, 12).
Tamaode(pizza2, 35).
Formade(pizza2, redonda).

Mejoroferta (PizzaX, PizzaY):


Preciocentimetrocuadrado (PizzaX, Monto1),
Preciocentimetrocuadrado (PizzaY, Pizza2),
Monto1 < Monto2.
rea (pizza, centimetroscuadrados)
Tamaode (Pizza, Lado),
Formade (Pizza, cuadrada),
Centimetroscuadrados es Lado * Lado.

rea (Pizza, centimetroscuadrados):


Tamaode (Pizza, Dimetro),
Formade (Pizza, redonda),
Radio es Dimetro/2,
Centimetroscuadrados es 3.142 * (Radio * Radio).
Inteligencia Artificial

PREUFOD

JUTICALPA

Pgina 14

Tutorial de Prolog
Preciocentimetrocuadrado (Pizza, Monto):
rea (Pizza, Centimetroscuadrados),
Preciode (Pizza, Dlares),
Monto es Dlares / Centimetroscuadrados.

OPCIONES DE INGRESO DE DATOS

Puedo generalizar el programa para cualquier pieza? Una versin del programa de
pizza que contiene hechos, como precio de (pizza1, 10) y precio de (pizza2, 12) est
limitado a pizzas especficas. El programa puede generarse para recolectar entrada del
usuario y almacenarla en variables, o evaluando nuevos hechos en el momento de la
ejecucin.
Cmo reno entrada del usuario? Si considera una vez ms la seccin de la
programacin procedural de este captulo, recordara que el programa BASIC
recolectaba el tamao, la forma y el precio de cada pizza empleando declaraciones
input como:
Input Ingrese el tamao de pizza1:, Tamao1
La declaracin input desplegaba el indicado de comandos ingrese el tamao de
pizza1:, y luego almacenaba el numero ingresado en una variable llamada Tamao1.
Prolog tiene opciones similares.
Cmo agregara hechos en tiempo de ejecucin? Otra manera de generalizar el
programa de pizza consiste en excluir todos los hechos acerca de las dos pizzas. El
programa estar integrado entonces solo por cuatro reglas. Cuando el programa se
ejecute, puede usar el predicado integrado de Prolog asserta para agregar hechos
temporales al programa. Este predicado agrega un hecho del principio de un programa
de Prolog. El comando asserta (precio de (prizza1, 10)), agrega temporalmente el
hecho de que la pizza1 cuesta 10 dlares
Inteligencia Artificial

PREUFOD

JUTICALPA

Pgina 15

Tutorial de Prolog
Depuracin Con Trace
Cmo compruebo un programa de prolog? Al igual que con los programas escritos
en lenguajes procedurales u orientados a objetos debe probar sus programas de prolog
mediante ingresos de datos de prueba, para asegurarse de que los clculos y la lgica
se ejecutan correctamente. La mayor parte de los compiladores de prolog proporcionan
una caracterstica que da seguimiento a cada instalacin. Esta caracterstica resulta
especficamente prctica para vigilar el estado de cada variable a medida que prolog
recorre cada hecho y reglas.
Lenguajes y Aplicaciones Declarativos
Qu clase de problemas son adecuados para el mtodo declarativo? Como ha
visto el ejemplo de la pizza, es posible usar un lenguaje declarativo para resolver un
problema requiere de clculos. Sin embargo, problemas con grandes cantidades de
clculos no suelen ser adecuados para el paradigma declarativo. Como regla general,
los lenguajes de programacin declarativos son ms adecuados para problemas que se
relacionan con palabras y conocimientos ms que nmeros. Son una buena opcin
para aplicaciones como:

Bases de datos que contienen relaciones complejas (por ejemplo, una base de
datos empleada para elaborar un rbol genealgico, o una base de datos de

calles y una autopista para elaborar mapas de rutas).


sistemas de apoyo a la toma de decisiones que manejan problemas
semiestructurados (por ejempl, un sistema de ayuda a determinar tcticas para
compaas militares o uno de) que ayuda a los planeadores a asignar recursos de

energa de manera eficiente).


sistemas expertos que requieren anlisis de mltiples factores interrelacionados
(por ejemplo, un sistema que ayude a detectar problemas en aparatos
electrodomsticos y a repararlos, o un programa que traduzca documentos de un
lenguaje a otro).

Inteligencia Artificial

PREUFOD

JUTICALPA

Pgina 16

Tutorial de Prolog
Cules son las ventajas y desventajas de los lenguajes declarados? Ofrecen un
entorno de programacin eficaz para problemas que incluyen palabras, conceptos y
lgica compleja. Como aprendi en este captulo, los lenguajes declarativos
proporcionan gran flexibilidad para consultar un conjunto de hechos y reglas. Estos
lenguajes tambin permiten describir problemas empleando palabras en lugar de
estructuras abstractas requeridas por los lenguajes procedurales

y orientados a

objetos.
Sin embargo, en la actualidad los lenguajes declarativos no son populares y no suelen
usarse en aplicaciones de produccin. En alguna medida, el nfasis actual en el
paradigma orientado a objetos ha sacado a los lenguajes declarativos del uso masivo,
tanto en educacin como en el mercado de trabajo. Muchos aspirantes a programar
nunca llega a conocer los lenguajes declarativos, de modo que no incluyen entre los
lenguajes evaluados para un proyecto especfico.
Los lenguajes declarativos tienen la reputacin de proporcionar capacidades mnimas
de entrada y salida. Aunque muchos de los compiladores de Prolog de la actualidad
proporcionan acceso a componentes de interfaces de usuario de Windows y Mac, a
menudo los programadores desconocen esta capacidad.
Una desventaja final de los lenguajes declarativos es su relativamente deficiente
desempeo en la arquitectura de las computadoras personales de hoy en da, que
estn optimizadas para el procesamiento secuencial. Los lenguajes declarativos de
ejecutan de manera ms eficiente en arquitectura en paralelo, que apenas estn
emergiendo en el mercado de las computadoras personales.

Inteligencia Artificial

PREUFOD

JUTICALPA

Pgina 17

Tutorial de Prolog
Ejercicios en Prolog
En esta entrada resolveremos algunos ejercicios en Prolog.
1. Dados dos nmeros, indique el menor de ellos
2. Dados dos nmeros, devolver su residuo
3. Dada la funcin residuo y un numero, mostrar los divisores de un numero
4. Buscar un elemento en una lista
5. Insertar un elemento al inicio de una lista
6. Insertar un elemento al final de una lista
7. Sumar todos los elementos de una lista
8. Dadas dos listas, determinar si estas son iguales
9. Dado un numero, devuelva su factorial
10. Hacer un programa para el clculo del nmero fibonacci

1. Dados dos nmeros, indique el menor de ellos


menor(X,Y,Z) :- X>Y, Z is Y.
menor(X,Y,Z) :- Y>X, Z is X.
Z contiene el numero menor entre X e Y.
2. Dados dos numeros (x e y), devolver el residuo de X/Y
residuo(X,Y,Z) :- X<Y, Z is X.
residuo(X,Y,Z) :- X1 is X-Y, residuo(X1,Y,Z1), Z is Z1.
Z es la variable que contiene el residuo de dividir X/Y.

3. Dada la funcion residuo y un numero, mostrar los divisores de un numero


divisores(X,Y) :- Y=1.
divisores(X,Y) :- residuo(X,Y,Z), Z=0, writeln(Y,'es divisor de',X), divisores(X,Y-1).
divisores(X,Y) :- divisores(X,Y-1).
residuo(X,Y,Z) :- X<Y, Z is X.
residuo(X,Y,Z) :- X1 is X-Y, residuo(X1,Y,Z1), Z is Z1.
muestraDivisores(X) :- divisores(X,X).
En este ejercicio reutilizamos la funcion residuo del ejercicio anterior, para mostrar
todos los divisores de X solo llamamos a la funcion muestraDivisores.
4. Buscar un elemento en una lista
Inteligencia Artificial

PREUFOD

JUTICALPA

Pgina 18

Tutorial de Prolog
pertenece(X,[M|N]) :- X=M.
pertenece(X,[M|N]) :- (X,N).
Esta funcin devuelve true o false si la variable X pertenece a la lista.
5. Insertar un elemento al inicio de una lista
insertaInicio(X,L,Z) :- Z is [X|L].
X es el elemento a insertar, L es la lista y Z es la nueva lista con el elemento X al inicio.

6. Insertar un elemento al final de una lista


insertaFinal(X,L,Z) :- L=[], Z is [X].
insertaFinal(X,[L|Lr],Z) :- insertaFinal(X,Lr,Z1), Z is [L|Z1].
X es el elemento a insertar al final, L es la lista y Z es la nueva lista con el
elemento X al final.

7. Sumar todos los elementos de una lista


suma([H|T],Y) :- T=[], Y is H.
suma([H|T],Y) :- suma(T,Y1), Y is H+Y1.
[H|T] es la lista, Y devuelve la suma de todos sus elementos.

8. Dadas dos listas, determinar si estas son iguales


soniguales([M|N],[P|Q]) :- M=P, soniguales(N,Q).
soniguales(M,N) :- M=[], N=[].

Esta funcin devuelve true o false si las listas son iguales o no.
9. Dado un numero, devuelva su factorial
factorial(N,F) :- N>1, N1 is N-1, factorial(N1,F1), F is N*F1.
Inteligencia Artificial

PREUFOD

JUTICALPA

Pgina 19

Tutorial de Prolog
factorial(N,F) :- N=1, F is 1
N es el numero a calcular su factorial y F es el factorial de N.
10. Hacer un programa para el calculo del numero fibonacci
fibo(X,N) :- X=0, N is 1.
fibo(X,N) :- X=1, N is 1.
fibo(X,N) :- X>1, fibo(X-1,N1), fibo(X-2,N2), N is N1+N2.
N devuelve el numero fibonacci de X.

Inteligencia Artificial

PREUFOD

JUTICALPA

Pgina 20

You might also like