Anda di halaman 1dari 12

Ingeniera del Software

Programacin Lgica y Funcional

1 Introduccin al PROLOG
1.0 Lenguaje Procedural vs Lenguaje Declarativo
El Lenguaje procedural permite al programador decirle a la computadora lo que tiene que hacer, paso a paso, procedimiento por procedimiento, hasta alcanzar una conclusin o ejecutar una funcin. Ejemplo: Ingreso de Clientes. Prolog es declarativo, se declara la situacin con la que quiere trabajar y a donde quiere ir. El propio lenguaje realiza el trabajo de decidir como alcanzar dicho objetivo. Ejemplo: Quien es el abuelo de Carlos?

1.1 Generalidades
Prolog es un lenguaje de programacin que se utiliza para resolver problemas que existen entre objetos y relaciones. La programacin en Prolog consiste simplemente en: declarar hechos sobre los objetos y sus relaciones, definir reglas sobre dichos objetos y relaciones, y hacer preguntas. Prolog es un lenguaje de programacin declarativa (coloquial), lo cual quiere decir que el computador y el programador sostienen una especie de conversacin. Prolog espera a que se ingrese hechos y las reglas que definen el problema a resolver. Una recomendacin, Prolog es diferente a cualquier otro lenguaje de bajo o alto nivel, por tanto, nunca resolver un problema en otro lenguaje para luego traducirlo a Prolog. Objetos y Relaciones Un objeto puede ser cualquier cosa que pueda representarse simblicamente en una computadora: leon tigre puma

Ing. Sal Prez Vega

Manual PROLOG

Programacin Lgica y Funcional


papa camote lechuga oro plata Y las relaciones son: animal vegetal mineral

1.2 Los Hechos


La primera forma de combinar un objeto y una relacin es usarlas para definir un hecho. Un hecho es una relacin entre objetos. Sintaxis:

relacion (objeto, objeto, ...)


La relacin se conoce como el predicado y los objetos como los argumentos. Los siguientes puntos son importantes: Los nombres de las relaciones deben comenzar con una letra minscula. Los objetos se escriben separados por comas y encerrados entre parntesis. Al final del hecho debe de ir un punto. Por ejemplo: animal(leon). vegetal(papa). mineral(oro). Comentarios: el objeto oro tiene relacin con mineral. La traduccin al castellano es necesariamente vaga, porque la lgica de los hechos en prolog no especifica si el oro era un mineral, el oro es un mineral o el oro parece un mineral.

Ing. Sal Prez Vega

Manual PROLOG

Programacin Lgica y Funcional


Cuando utilice el prolog, necesitara tener en cuenta lo que son las relaciones el prolog no lo puede hacer por usted-. Sus programas tendrn sentido solo si son consientes a lo largo de un programa con el significado de una relacin dada. Algunas veces ayuda usar las palabras que tengan un sentido aproximado de lo que significan. Por ejemplo, si quiere indicar el hecho que Carlos es un prncipe, podra utilizar la siguiente relacin: es_un_principe(carlos)

1.3 Las Reglas


Cuando la verdad de un hecho depende de la verdad de otro hecho o de un grupo de hechos se usa una regla. Una regla consiste en una cabeza y un cuerpo. El cuerpo puede estar formado por varios hechos u objetivos. Sintaxis:

cabeza :- objetivo 1, objetivo 2, ..., objetivo n.


Los objetivos van separados por comas, especificando conjuncin y al final debe de ir un punto. Por ejemplo, una regla es

mayor_de_edad(X) :- persona(X,E), E>18. 1.4 Las variables


Las variables se utilizan para describir hechos y reglas generales. Los nombres de las variables deben comenzar con letra mayscula o con el carcter. Ejemplos Edad Promedio

1.5 La estructura de un programa en PROLOG


La mayora de los programas en Prolog estn organizados en cuatro secciones principales: Domains (dominios) Predicates (predicados) Clauses (clausulas)

Ing. Sal Prez Vega

Manual PROLOG

Programacin Lgica y Funcional


Goal (objetivos)

Seccin de constantes
En la seccin de constantes podemos declarar constantes simblicas que pueden usarse en el cuerpo del programa. La utilidad de las constantes en Visual Prolog es similar a la que estos elementos tienen en otros lenguajes de programacin, normalmente, sirven para facilitar el uso de diversas cantidades, expresiones y smbolos. La definicin de la seccin de constantes se encabeza con la palabra reservada CONSTANTS, y cada lnea de definicin es de la forma: <Nombre Constante> = <Definicin de Macro> Por ejemplo, el siguiente fragmento de programa: CONSTANTS numero = 1 expresion = 1+1 GOAL A=numero, B=expresion, write(A), write(B), nl. Resultado 12 A=1, B=2 1 Solution Las restricciones que se imponen en el uso de constantes se exponen a continuacin: El sistema no distingue entre maysculas y minsculas. La definicin de una constante no puede referirse a s misma, es decir, no es posible construir definiciones recursivas de constantes. Puede haber varias secciones CONSTANTS a lo largo del programa, y toda constante debe ser definida antes de ser utilizada. Las constantes declaradas son efectivas desde el punto en que son declaradas hasta el final del fichero fuente donde han sido definidas y en algunos ficheros incluidos tras la declaracin. Las constantes slo se pueden declarar una vez.

Ing. Sal Prez Vega

Manual PROLOG

Programacin Lgica y Funcional


Seccin de dominios
En la seccin DOMAINS se pueden definir dominios no especificados por defecto por Visual Prolog. Por ejemplo, el dominio integer es estndar para el compilador, no as el dominio sinnimo ENTERO o dominios complejos. En estos ltimos casos, el programador debe definirlo en esta seccin. Dominios Stntard

char, carcter encerrado entre apostrofes (comillas simples)


('a', 'b', 'c')

Integer, Enteros desde -2147483648 hasta 2147483647 Real, Nmero con punto flotante equivalente al doubl. El rango permitido es
1*10^-307 hasta 1*10^+308

String, Referidos a una secuencia de caracteres escritos entre comillas. Ejemplo:


Pedro Arce.

Symbol similar al String

Cada seccin de dominios debe comenzar con la palabra DOMAINS. Ejemplo:


DOMAINS entero = integer Es posible usar 5 formatos de declaraciones para dominios definidos por el usuario. Dominios de Objetos Compuestos El formato es como sigue:

dominio = [reference] [align {byte|word|dword}] declaracion1;[declaracion2];... dominio: nombre dado al dominio especificado por el usuario. declaracion1; [declaracion2]: declaracin de objetos compuestos alternativos que tienen que tener la forma siguiente: functor([sub_1 [, sub_2, ...] ]) donde o functor es el nombre del objeto compuesto alternativo. o sub_1 [,sub_2, ...] son subcomponentes del objeto compuesto que deben tener su correspondiente nombre y dominio. Este ltimo puede ser estndar o definido por el usuario.

Ing. Sal Prez Vega

Manual PROLOG

Programacin Lgica y Funcional


reference: indica la declaracin de un dominio de referencia. En este tipo de dominios los argumentos de entrada pueden ser variables libres. align: indica el tipo de distribucin de memoria que se va a usar. Otros ejemplos: Domains apellido, nombres = symbol numero_cuenta, cantidad = integer saldo_cuenta, promedio = real nota1,nota2,nota3 = integer

Seccin de Predicados
En la seccin de Predicados son las relaciones. El trmino predicado viene de la lgica formal, la cual es uno de los fundamentos iniciales del Visual Prolog. Siempre que su programa vaya a usar un predicado particular en las clausulas, se necesita declararlo formalmente en la seccin de predicados. Ejemplos: empleado(symbol)

numero(integer) alumno(string) letra(char)

Seccin de Clausulas
Los hechos que construy con los objetivos y relaciones se listan en la seccin de clausulas (clauses). La seccin de clausulas puede tambin contener reglas y otras construcciones.

Ejemplo: empleado(Carlos Asmat). numero(4355) alumno(merilyn_salvatierra) letra(k)

Ing. Sal Prez Vega

Manual PROLOG

Programacin Lgica y Funcional


Seccin de Objetivos
Esta es la seccin que le dice prolog lo que ha de encontrar o lo que desea que la computadora haga con la informacin que se le ha suministrado en las otras secciones. Normalmente un programa tendr al menos las secciones de predicados y clausulas, pero es posible tener un programa que tenga solo una seccin objetivo.

Como nuestro Prolog puede usarse de forma interactiva, es frecuente ejecutar un programa y luego esperar a que se nos pregunte el objetivo. La seccin goal nos permite ejecutar los programas de una forma no interactiva, y por tanto, buscar la solucin deseada tan pronto como se ejecute el programa. goal write("Hola"),nl, write("Lenguaje: Prolog"), nl.

Ing. Sal Prez Vega

Manual PROLOG

Programacin Lgica y Funcional

2 Lenguaje Visual PROLOG


Bsqueda de Informacin
El visual Prolog busca a travs de sus clusulas de arriba abajo y de izquierda a derecha.

2.0 Uso de Variables


Hay otra forma de hacer preguntas. Si se conoce la relacin pero no los objetos, puede usar variables. Cualquier palabra objeto que comienza con una letra mayscula se considera una variable. Despus de la mayscula, puede tener cualquier nmero de letras (en maysculas o minsculas), junto con dgitos y caracteres de subrayado. La forma ms rpida de ver lo que puede hacer una variable es hacer una pregunta al programa. El Prolog tomo el objetivo con la variable y lo compara con las clausulas. Primero comprueba si el predicado es el mismo que el de la primera clausula. Si lo es, entonces prueba si el objetivo y el predicado tienen el mismo nmero de argumentos. Si alguna de esas cosas no es verdad, el prolog deja la primera clausula y realiza la prueba del objetivo con la segunda clausula, Si ambos son verdad el mismo predicado y el mismo nmero de argumentos-, el prolog entonces comprueba si los argumentos son los mismos. En este caso, el argumento objetivo es una variable y puede ser cualquier cosa. As el prolog instancia al valor de la clusula; en otras palabras, el prolog asume por una que vez que tiene el valor del argumento en la clusula.

Variables Annimas
Se describe un carcter de subrayado. La variable annima se utiliza en el mismo lugar que las variables estndares, pero nunca son instanciadas con ningn valor particular. le_gusta(tatiana,_). % a Tatiana le gusta algn deporte? Le_gusta(_,_). % ? Siempre el resultado ser true o false.

Ing. Sal Prez Vega

Manual PROLOG

Programacin Lgica y Funcional


2.1 Aridad
La aridad de un predicado, consiste en el nmero de argumentos que tiene. % Programa con hechos de aridad cero predicates uno dos tres cinco siete clauses uno. dos. tres. cinco. siete. goal cinco, write("Encontrado"),nl. Ejemplo con aridad 1 % Programa con hechos de aridad uno predicates alumno(symbol) clauses alumno(juan). goal write("Resultado Aridad Uno: "),alumno(X),nl. Hacer ejemplos con aridad 2,3,4, ..

2.2 Uso del domain


domains marca = symbol kilometraje = long antiguedad = integer color = symbol precio = long predicates carro(marca,kilometraje,antiguedad,color,precio) camion(marca,kilometraje,antiguedad,color,precio) vehiculo(marca,kilometraje,antiguedad,color,precio)

Ing. Sal Prez Vega

Manual PROLOG

Programacin Lgica y Funcional


clauses carro(chrysler,130000,7,rojo,8500). carro(ford,90000,4,azul,14000). carro(datsun,8000,15,blanco,500). carro(honda,15000,4,rojo,8500). carro(nissan,90000,12,azul,25000). carro(datsun,8000,1,blanco,30000). camion(ford,80000,6,blanco,28000). camion(fiat,50000,5,negro,15000). camion(toyota,25000,4,negro,25000). camion(scania,80000,8,amarillo,85000). camion(mercedes,50000,5,anaranjado,82000). camion(volvo,25000,4,blanco,25000). %vehiculo(Marca,Kilometraje,Antiguedad,Color,Precio):goal %%Listar todos los carros %%Listar todos los camiones %%Listar los carros y camiones con una antiguedad mayor a 5 o menor a 10 %%Listar los vehculos con Antigedad mayor a 2 aos y de color negro.

Ejercicio para usar variables y formulas DOMAINS precio = integer % Para definir el dominio en cada uno de los parametros de nombre = symbol % cada hecho o regla (definidos en los predicates) PREDICATES
% Se definen todos aquellos hechos o reglas, que sern utilizados en las clauses, con sus parametros

entrada(nombre,precio) segundo(nombre,precio) postre(nombre,precio) refresco(nombre,precio) menu(nombre,nombre,nombre,nombre,precio) CLAUSES % Declaracion de hechos %declaracion de reglas menu(E,PF,P,R,PT):..

Ing. Sal Prez Vega

Manual PROLOG

10

Programacin Lgica y Funcional


goal Realizar las siguientes operaciones: Ingresar 4 platos de cada tipo. Listar las entradas, segundos Cunto cuesta el tacu tacu? Existe algn men con lomo_saltado y palta_rellena? Cunto cuesta el ceviche? Existe algn men con rocoto_relleno y tacu_tacu? Listar todos los postres y su precio Listar todos los menus con sus platos y el precio del menu

Ejercicios Propuestos
Ejercicio 1. Los invitados a una fiesta se representan con los predicados hombre y mujer que determinan su sexo. Por ejemplo:
hombre(alfredo). hombre(felipe). hombre(francisco). mujer(sonia). mujer(eva). mujer(carmen).

Adems, conocemos las bebidas preferidas de cada invitado definidas por el predicado bebe:
bebe(alfredo, whisky). bebe(alfredo, ron_cola). bebe(felipe, cerveza). bebe(francisco, vino). bebe(sonia, inka_kola). ...

Aade tus propios invitados a la fiesta y sus bebidas favoritas y define un predicado pareja(X,Y) que tenga xito cuando X es un hombre e Y una mujer y tengan al menos una bebida favorita en comn. Define tambin el predicado pareja(X,Y) que se satisface cuando X e Y tienen al menos dos bebidas favoritas en comn. Ejercicio 2. Modifica el ejercicio anterior para reflejar los siguientes hbitos de bebida: Pepe bebe cualquier cosa que beba Alfredo Elena bebe cualquier cosa que beban Sonia o Felipe Juan bebe cualquier bebida

Ing. Sal Prez Vega

Manual PROLOG

11

Programacin Lgica y Funcional


Ejercicio 3. Queremos viajar por las provincias del departamento de Lima usando un auto, por ello, decidimos que slo podemos plantearnos un viaje de la provincia X a la provincia Y si stas son fronterizas o si para llegar a ellas basta con atravesar una provincia.

Figura 1: Mapa de Lima. Define un predicado viaje(X,Y) que se satisface cuando es posible viajar de la provincia X a la provincia Y.

Ing. Sal Prez Vega

Manual PROLOG

12