You are on page 1of 11

UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA FACULTAD DE ING.

MINAS, GELOGIA Y CIVIL ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS

Entorno de Programacin Visual Prolog


OBJETIVOS Los objetivos de sta prctica son: Conocer Prolog. Conocer el manejo de Visual Prolog. Conocer la forma de declarar y utilizar los predicados Desarrollar ejemplos en modo consola o texto. PROLOG: Prolog es un lenguaje de programacin hecho para representar y utilizar el conocimiento que se tiene sobre un determinado dominio. Ms exactamente, 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. 11. TIPOS DE DATOS EN PROLOG 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 quiere agregar espacios entre los caracteres del smbolo.

Lab.Sistemas Expertos

Docente: Elvira Fernndez J

UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA FACULTAD DE ING. MINAS, GELOGIA Y CIVIL ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS

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 limite esta determinado porque los enteros se almacenan como valores de 16 bits, este limite 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 especifica 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.

Lab.Sistemas Expertos

Docente: Elvira Fernndez J

UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA FACULTAD DE ING. MINAS, GELOGIA Y CIVIL ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS

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. 1. EL ENTORNO DE VISUAL PROLOG

PARTE 1: Corriendo el Primer Programa en Visual Prolog Los programas en Prolog a lo que tienden es a desarrollar consultas en base a predicados que se escriben en un "programa" de Prolog. Tras "correr" 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.Sistemas Expertos

Docente: Elvira Fernndez J

UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA FACULTAD DE ING. MINAS, GELOGIA Y CIVIL ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS

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 copi, 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 lenguaje C, 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). hermano(juan, pedro).
Lab.Sistemas Expertos

Docente: Elvira Fernndez J

UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA FACULTAD DE ING. MINAS, GELOGIA Y CIVIL ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS

amigos( luis,pedro). 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). Yes Es valioso el oro? Esta es una meta Si, es la respuesta

En vez de la consulta anterior se colocara esta nueva: 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

Lab.Sistemas Expertos

Docente: Elvira Fernndez J

UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA FACULTAD DE ING. MINAS, GELOGIA Y CIVIL ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS

3 soluciones Esto corresponde a las especificaciones anteriormente en las clusulas. que se han definido

Si desea aumentar las especificaciones puede ubicar valioso(cobre). valioso(zing). La respuesta permitir cinco soluciones para X. Consideracin: Si desea mejorar su aplicacin podrir ubicar entre comillas todo su programa todas las especificaciones de las clusulas el paquete generara de mejor forma estas definiciones ubicndolas de un color respectivo. 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 PARTE 3: Bsquedas: Entendiendo las Variables y Predicados. La prctica 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.Sistemas Expertos

Docente: Elvira Fernndez J

UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA FACULTAD DE ING. MINAS, GELOGIA Y CIVIL ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS

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: Pedro e Ivan Todos los hijos. GOAL hijo(X,Y). Respuesta: Dan, Juan Pedro, Dan Ivan,Dan Hermanas de Sue GOAL Respuesta: no tiene hermana

Lab.Sistemas Expertos

Docente: Elvira Fernndez J

UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA FACULTAD DE ING. MINAS, GELOGIA Y CIVIL ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS

Hermanas de Susana GOAL Respuesta: Maria

Hermanos de Larry GOAL Respuesta: Harold

Todos los casados: GOAL Respuesta: Juan larry Todos los hijos de Dan: GOAL Respuesta: Pedro Ivan PARTE 4: Mejorando los Predicados: Usando :- coma(,) y punto y coma( ;) 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)

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.

Lab.Sistemas Expertos

Docente: Elvira Fernndez J

UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA FACULTAD DE ING. MINAS, GELOGIA Y CIVIL ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS

Consultas: De quien es el cuado(a) de Juan: GOAL cunado("Juan", Z) Respuesta: Susana.

Quien es el cuado de Maria: GOAL Respuesta: No tiene cuado.

Todos los cuados: GOAL Respuesta: Juan, Susana Harold, sue 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: Juan, Dan Dan, Pedro Dan, Ivan

Lab.Sistemas Expertos

Docente: Elvira Fernndez J

UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA FACULTAD DE ING. MINAS, GELOGIA Y CIVIL ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS

Todos los abuelos: GOAL Respuesta: Juan, Pedro Juan,Ivan 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, o sea redefinirla varias veces.

Lab.Sistemas Expertos

10

Docente: Elvira Fernndez J

UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA FACULTAD DE ING. MINAS, GELOGIA Y CIVIL ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS

Consultas: Todos los hermanos existentes: GOAL Respuesta: Harold, Larry Ivan, Simon Larry, Harold Simon, Ivan

TRABAJO APLICATIVO 1. Sobrecargue el predicado hermanos, para encontrar a los hermanos que tengan el mismo padre, utilizando el predicado hijo: 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").

Lab.Sistemas Expertos

11

Docente: Elvira Fernndez J

You might also like