Professional Documents
Culture Documents
9110053
0801198016335
Carlos Marcial Torres
0714198100906
Inteligencia Artificial
PREUFOD
JUTICALPA
Pgina 1
Tutorial de Prolog
INTRODUCCION
Inteligencia Artificial
PREUFOD
JUTICALPA
Pgina 2
Tutorial de Prolog
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).
Inteligencia Artificial
PREUFOD
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
Nombre(joe,pescado)
Juegocartas(joe,pescado)
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
es una variable,
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
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.
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
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
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).
PREUFOD
JUTICALPA
Pgina 14
Tutorial de Prolog
Preciocentimetrocuadrado (Pizza, Monto):
rea (Pizza, Centimetroscuadrados),
Preciode (Pizza, Dlares),
Monto es Dlares / Centimetroscuadrados.
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
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
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.
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