You are on page 1of 12

UNIVERSIDAD PERUANA LOS ANDES

LABORATORIO 1
ENTORNO DE PROGRAMACIN VISUAL PROLOG
Capacidades

Conocer el manejo de Visual Prolog.


Conocer la forma de declarar y utilizar los predicados

Habilidad
Desarrollar ejercicios en modo consola o texto.
Prolog
Prolog. Programming in Logic (Prolog), es otro de los lenguajes de programacin
ampliamente utilizados en Inteligencia Artificial. Prolog fue desarrollado en Francia,
en 1973 por Alain Colmenauer y su equipo de investigacin en la Universidad de
Marseilles. Inicialmente fue utilizado para el procesamiento de lenguaje natural, pero
posteriormente se populariz entre los desarrolladores de aplicaciones de Inteligencia
Artificial por su capacidad de manipulacin simblica. Utilizando los resultados del
grupo francs, Robert Kowalski de la Universidad de Edimburgo, en Escocia,
desarroll la teora de la programacin lgica. La sintaxis propuesta por Edimburgo,
se considera el estndar de facto del Prolog. A partir de 1981 tuvo una importante
difusin en todo el mundo, especialmente porque los japoneses decidieron utilizar
Prolog para el desarrollo de sus sistemas de computacin de quinta generacin.
Actualmente existen varios dialectos del Prolog para diferentes plataformas.
Es un lenguaje de programacin lgico hecho para representar y utilizar el
conocimiento que se tiene sobre un determinado dominio. El dominio es un conjunto
de objetos y el conocimiento se representa por un conjunto de relaciones que
describen las propiedades de los objetos y sus interrelaciones. Un conjunto de reglas
que describa estas propiedades y estas relaciones es un programa Prolog.
Prolog es un lenguaje de programacin que es usado para resolver problemas
que envuelven objetos y las relaciones entre ellos.
Prolog es un lenguaje utilizado para implementar inteligencia artificial y
sistemas expertos. Gran parte de su xito se debe a su conveniencia por ser cdigo
abierto (modificable) y se obtiene fcilmente en internet, adems de su capacidad de
deduccin de respuestas para las consultas realizadas, Prolog es un lenguaje simple y
fcil de programar, hasta para principiantes, pero sus motores de inferencia no siempre
son eficientes. Sus aplicaciones varan desde sistemas ambientales hasta la resolucin de
funciones automatizadas.
Una de las caractersticas que hacen de Prolog un lenguaje de gran inters es su
reducido nmero de mecanismos de soporte, entre los que se encuentran el
reconocimiento de patrones, la unificacin, el reintento ("backtracking"), el manejo de
listas y de estructuras de datos flexibles, as como la recursividad.
1

Lab. Inteligencia Artificial

UNIVERSIDAD PERUANA LOS ANDES

Ventajas:
La habilidad de PROLOG para calcular de forma procedural es una de las
ventajas especficas que tiene el lenguaje. Como consecuencia esto anima al
programador a considerar el significado declarativo de los programas de forma
relativamente independiente de su significado procedural. Es decir, las ventajas
de la forma declarativa de este lenguaje son claras (es ms fcil pensar las
soluciones y muchos detalles procedurales son resueltos automticamente por el
propio lenguaje) y podemos aprovecharlas.
Una ventaja desde el punto de vista del usuario es la facilidad para programar ya
que se pueden escribir programas rpidamente, con pocos errores originando
programas claramente legibles, aun si no se conoce muy bien el lenguaje.
No hay que pensar demasiado en la solucin del problema, ya que Prolog infiere
sus respuestas basndose en las reglas declaradas dentro del programa.
Modularidad: cada predicado (procedimiento) puede ser ejecutado, validado y
examinado independiente e individualmente. Prolog no tiene variables globales,
ni asignacin. Cada relacin est auto contenida, lo que permite una mayor
modularidad, portabilidad y reusabilidad de relaciones entre programas.
Polimorfismo: se trata de un lenguaje de programacin sin tipos, lo que permite
un alto nivel de abstraccin e independencia de los datos (objetos).
En Prolog, se puede representar incluso los mismos programas Prolog como
estructuras.
Prolog utiliza un mecanismo de bsqueda independiente de la base de hechos.
Aunque pueda parecer algo retorcido, es una buena estrategia puesto que
garantiza el proceso de todas las posibilidades. Es til para el programador
conocer dicho mecanismo a la hora de depurar y optimizar los programas.
Manejo dinmico y automtico de memoria.
En prolog se utiliza notacin prefija e infija

Desventajas:
La resolucin automtica no siempre es eficiente, por lo que eventualmente se
podra dar una respuesta incorrecta a una consulta.
Prolog algunas veces es incapaz de reconocer que un problema es (para su
propio conocimiento) inaplicable o insuficiente. Si el programa no contiene
suficiente informacin para contestar una consulta, es incapaz de reconocerlo y
responde no. En esta situacin sera ms eficiente conocer que la respuesta no es
negativa, sino que no es posible inferir un resultado.
1. TIPOS DE DATOS EN PROLOG
2

Lab. Inteligencia Artificial

UNIVERSIDAD PERUANA LOS ANDES


Symbol
Hay dos tipos de smbolos:
1. Un grupo de caracteres consecutivos (letras, nmeros y signos de subrayado)
que comienzan con un carcter en minscula
Ejemplo: Alto,Alto_edificio,El_alto_edificio_en_la_ciudad
2. Un grupo de caracteres consecutivos (letras y nmeros) que comienzan y
terminan con dobles comillas("). Este tipo es til cuando se quiere comenzar el
smbolo con un carcter en mayscula o si se quieres agregar espacios entre los
caracteres del smbolo.
Ejemplo:"alto","alto edificio"
String
Cualquier grupo de caracteres consecutivos (letras y nmeros) que comience y termine
con dobles comillas("). Es igual a smbolo pero Prolog los trata de forma distinta.
Ejemplo:"alto","alto edificio"
Integer
Cualquier nmero comprendido entre (-32.768 y 32.768). El lmite esta determinado
porque los enteros se almacenan como valores de 16 bits, este lmite puede variar segn
la versin de Prolog.
Ejemplo:4,-300,3004
Real
Cualquier numero real en el rango +/- 1E-307 a +/-1E+308. El formato incluye estas
opciones: signo, numero, punto decimal, fraccin, E(exponente), signo para el
exponente, exponente.
Ejemplo:3,3.1415
Char
Cualquier carcter de la lista ASCII estndar, posicionado entre dos comillas sencillas
().

Ejemplos:t,X PROLOG est orientado a la resolucin de problemas mediante


el clculo de predicados, basado en:
Preguntas a la base de datos.
Pruebas matemticas.
El programa PROLOG especifca cmo debe ser la solucin, en vez de dar el
algoritmo para su resolucin. La solucin se obtiene mediante bsqueda
aplicando la lgica de predicados.
3

Lab. Inteligencia Artificial

UNIVERSIDAD PERUANA LOS ANDES


Objetos de datos

Tipos de datos primitivos: variables y constantes:


Enteros
Reales
Caracteres
Los identificadores con minscula representan hechos, los que van con
mayscula variables. El alcance de una variable es la regla donde aparece.

EL ENTORNO DE VISUAL PROLOG

PARTE 1: Corriendo el Primer Programa en Visual Prolog


Los programas en Prolog permiten desarrollar consultas en base a predicados
que se escriben en un "programa" de Prolog. Al ejecutar el programa, se pueden
hacer estas consultas.
Para ejecutar Visual Prolog, nos dirigimos al men inicio, una vez dentro realizamos lo
siguiente:

Presionamos la opcin New del men File. lo que aparecer una ventana en la
cual copie lo siguiente:

Lab. Inteligencia Artificial

UNIVERSIDAD PERUANA LOS ANDES

Luego almacene su archivo donde deseara pero siempre con la extensin pro.,
luego de almacenar el archivo notara el cambio de color de algunas letras del
programa que copio, si no ubic la extensin no suceder el cambio.

Anlisis del programa:


La estructuracin de un programa en Visual Prolog contiene estas partes,
requeridas necesariamente:
Domains: aqu se definen los tipos de datos que se han de usar en los
predicados, as por ejemplo,
hombre = string
metal = symbol
numeros = real
letra = char
Predicates: aqu se definen todos los predicados que se han de definir, en las
clusulas equivaldra a la definicin de funciones en un lenguaje, utilizan las
definiciones de Domains, as por ejemplo:
valioso(metal)
Hermano(hombre, hombre)
amigos( hombre,hombre,hombre)
Clauses: contiene la definicin especfica de los predicados
valioso(oro).
5

Lab. Inteligencia Artificial

UNIVERSIDAD PERUANA LOS ANDES


hermano(juan, pedro).
amigos( luis,pedro,pablo).
El smbolo de culminacin se determina por un punto.
Goal: contiene las consultas a desarrollar en el programa
El prolog permite como se indico extraer consultas lgicas de los que sucede en
el conocimiento expresado resultando estas consultas verdaderas o falsas (YES,
NO) segn corresponda, aqu se han de ubicar las preguntas necesarias, ejemplo;
es valioso el oro:
valioso(oro).
Para poner en memoria todas las clusulas y ver la consulta ejecute Test Goal del
men de proyecto o su equivalente CTRL+G o simplemente apretando el botn
G de la barra de botones.

Luego observara una ventana de sugerencias y errores y otra ventana que


muestra el resultado de la consulta en este caso YES.
Ntese que se ha ejecutado la consulta para crear un ejecutable se tiene que crear
un proyecto echo que se desarrollara despus
PARTE 2: Entendiendo y Mejorando el Programa
valioso(oro).
valioso(plata).
valioso(bronce).
Indican que la "La plata es valiosa", "el oro es valioso". Todos estos predicados
se escriben en un "programa" de Prolog. Tras "correr" el programa, se pueden
hacer estas consultas:
Valioso(oro). Es valioso el oro? Esta es una meta
Yes
Si, es la respuesta
En vez de la consulta anterior se colocara esta nueva:
6

Lab. Inteligencia Artificial

UNIVERSIDAD PERUANA LOS ANDES

Goal Valioso(X).
X es una variable, por ello va en mayscula
Al ejecutar la consulta la respuesta ser:
X=oro
X=plata
X=bronce
3 soluciones

Esto corresponde a las especificaciones que se han definido anteriormente en las


clusulas.
Si desea aumentar las especificaciones puede ubicar
valioso(cobre).
valioso(zing).
La respuesta permitir cinco soluciones para X.
Consideracin:
Especificaciones en Verde Amarillento, Clusulas en Negro, Cadenas en azul,
Variables en verde claro, errores en rojo, etc.
El programa quedara
Domains
metal = string
Predicates
valioso(metal) %Predicado nico no siempre ser as
Clauses
valioso("oro").
valioso("plata").
valioso("bronce").
valioso("cobre"). % Clusulas agregadas
valioso("zing").
Goal
valioso(X). %Consulta
7

Lab. Inteligencia Artificial

UNIVERSIDAD PERUANA LOS ANDES

PARTE 3: Bsquedas: Entendiendo las Variables y Predicados.


La practica le permitir proponer un sistema experto que deduzca quien es
cuado de quien en una familia en base a una serie de conocimientos propuestos,
para esto se ira paso a paso.
Crear un Documento en Visual Prolog y copiar :

Lab. Inteligencia Artificial

UNIVERSIDAD PERUANA LOS ANDES

Ahora se pretende buscar en la base de conocimiento ingresada, para esto se


tendr que aplicar GOAL en la ltima lnea de cdigo (que falta) modificndola
cada vez y haciendo correr la consulta con el botn G.
Casos: Indicar cual es la respuesta de la consulta:
Quien es hijo Dan:
GOAL hijo(X, "Dan").
Respuesta:
Todos los hijos.
GOAL hijo(X,Y).
Respuesta:
Hermanas de Sue
GOAL
Respuesta:
Hermanas de Susana
GOAL
Respuesta:
Hermanos de Larry
GOAL
Respuesta:
Todos los casados:
GOAL
Respuesta:
Todos los hijos de Dan:
GOAL
Respuesta:

PARTE 4: Mejorando los Predicados: Usando :- , ;


La idea de esta parte es encontrar quien es cuado de quien en base a las
clusulas definidas anteriormente, para esto antes de GOAL ubique el siguiente
predicado (No interesa que exista doble PREDICATES Y CLAUSES)

Lab. Inteligencia Artificial

UNIVERSIDAD PERUANA LOS ANDES


PREDICATES
cunado(persona,persona)
CLAUSES
cunado(A,B):-casado(A,C), hermana(C,B).
cunado(A,B):-hermano(A,C), casado(C,B).
Referencia: Las variables A, B y C permiten desarrollar las bsquedas
necesarias en caso estas sean encontradas se cumplan una tras otra en ser
verdaderas son asignadas a cuado y se ven como respuestas.
Consultas:
De quien es el cuado(a) de Juan:
GOAL cunado("Juan", Z)
Respuesta:
Quien es el cuado de Maria:
GOAL
Respuesta:
Todos los cuados:
GOAL
Respuesta:

PARTE 5: Mejorando la aplicacin trabajando con nuevos predicados


Se desea conocer en base a los conocimientos definidos:
PREDICATES
padre(persona,persona)
abuelo(persona,persona)
CLAUSES
padre(A,B):-hijo(B,A). % no toma en cuenta los hermanos cruzados
abuelo(A,B):-padre(A,C), padre(C,B).
Consultas:
Todos los padres:
GOAL
Respuesta:
Todos los abuelos:
10

Lab. Inteligencia Artificial

UNIVERSIDAD PERUANA LOS ANDES


GOAL
Respuesta:
Se desea conocer los hermanos en comn ya que no se distingue entre estos,
existen dos predicados diferentes hermana y hermano, es mas esta no es una
relacin de arriba abajo si no del miso nivel por ejemplo si se consulta:
GOAL hermana("Susana",X).
La respuesta es: Sin Solucin, pero: hermana("Maria","Susana").
La solucin parte por incluir un nuevo predicado (incluirlo al final antes de
GOAL):

PREDICATES
hermanos(persona,persona)
CLAUSES
hermanos(A,B):-hermano(A,B). %una clusula hermano corresponde a
hermanos
hermanos(A,B):-hermano(B,A). %un hermano puede referirse en forma
inversa definindose as en hermanos
hermanos(A,B):-hermana(A,B). %una clusula hermana corresponde a
hermanos
hermanos(A,B):-hermana(B,A). %una hermana puede referirse en forma
inversa definindose as en hermanos
hermanos("Popo","Ququ"). %Puede definirse nuevas clusulas
hermanos("Maria", "Pedro").
Referencia: Ntese que un predicado no es solamente una definicin si no que se puede
sobrecargar, osea redefinirla varias veces.
Consultas:
Todos los hermanos existentes:
GOAL
Respuesta:

TRABAJO APLICATIVO
1. Sobrecargue el predicado hermanos, para encontrar a los hermanos que tengan el
mismo padre, utilizando el predicado hijo:
11

Lab. Inteligencia Artificial

UNIVERSIDAD PERUANA LOS ANDES


Ejemplo: Pedro e Ivan son hermanos por que tienen el mismo padre.
hijo("Pedro", "Dan").
hijo("Ivan", "Dan").
2. Sobrecargue el predicado padre, para encontrar a los hijos de un padre que son
los hermanos de sus hijos, utilizando el predicado hijo y hermano.
Ejemplo: Si Ivan es hijo de Dan e Ivan es hermano de Simon, entonces Simon es
hijo de Dan.
hijo("Ivan", "Dan").
hermano("Ivan", "Simon").
3. Desarrolle su rbol genealgico

12

Lab. Inteligencia Artificial

You might also like