Guia - S de Laboratorios
Guia - S de Laboratorios
Guia - S de Laboratorios
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 es un lenguaje de programacin 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. 1. 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 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.
Ing. Jennifer Rocio Pillaca De La Cruz. Ing. Elinar Carrillo Riveros
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS 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.
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.
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS 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:
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.
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS 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). 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 4
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS 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: 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: Si desea mejorar su aplicacin podria 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 Ing. Jennifer Rocio Pillaca De La Cruz. 5
Ing. Elinar Carrillo Riveros
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS 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 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 :
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.
Ing. Jennifer Rocio Pillaca De La Cruz. Ing. Elinar Carrillo Riveros
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS 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) PREDICATES cunado(persona,persona) CLAUSES cunado(A,B):-casado(A,C), hermana(C,B). cunado(A,B):-hermano(A,C), casado(C,B).
Ing. Jennifer Rocio Pillaca De La Cruz. Ing. Elinar Carrillo Riveros
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS 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: GOAL Respuesta:
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS 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: Ejemplo: Pedro e Ivan son hermanos por que tienen el mismo padre. hijo("Pedro", "Dan"). hijo("Ivan", "Dan").
Ing. Jennifer Rocio Pillaca De La Cruz. Ing. Elinar Carrillo Riveros
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS 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"). LABORATORIO 2 PREDICADOS Y OPERADORES OBJETIVOS: Comprender los predicados y Operadores. PROCEDIMIENTO Bsquedas: Entendiendo las Variables y Predicados. La prctica le permitir proponer un sistema experto que deduzca toda una estructura familiar partiendo de solo definir quien es padre de quien, esto se ira definiendo paso a paso. Primero se ha de construir la base de conocimientos con las siguientes definiciones: Domains persona= string Predicates padre(persona,persona). Clauses padre("Pablo", "Juan"). %Pablo es padre de Juan padre("Pablo", "Marcela"). padre("Juan", "Maria"). padre("Juan", "Maura"). padre("Carlos", "Debora"). padre("Maria", "Luis"). padre("Maria", "Pati"). padre("Debora", "Miguel"). Nota: Se esta definiendo el predicado padre, que representa al padre de familia, no se esta considerando el gnero (masculino o femenino). Consultas:
Ing. Jennifer Rocio Pillaca De La Cruz. Ing. Elinar Carrillo Riveros
10
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS Quien es el padre de Juan?: GOAL padre(Quien, "Juan") Respuesta: Pablo de quien es padre: GOAL Respuesta: PARTE 2: Implementando ms predicados: Es necesario en base al conocimiento propuesto se debe conocer quien es hijo de quien, quien es el abuelo y los posibles hermanos, en base a los datos anteriores Nota: La inclusin de :- representa la estructura condicional si La inclusin de , representa conector lgico y La inclusin de ; representa conector lgico o La inclusin de <> representa conector lgico diferente Defina los predicados y las clusulas: Predicados a aumentar
Clusulas a aumentar
Consultas: Quien es el hijo de Pablo: GOAL Respuesta: Quien es el hijo de Maria: GOAL Respuesta: Marcela de quien es hijo: GOAL Respuesta:
Ing. Jennifer Rocio Pillaca De La Cruz. Ing. Elinar Carrillo Riveros
11
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS Quien es el abuelo de Maria: GOAL Respuesta: Quien es el abuelo de Pati: GOAL Respuesta: Juan de quien es abuelo: GOAL Respuesta: Mostrar todos los abuelos: GOAL Respuesta:
Quien es el hermano de Pati: GOAL Respuesta: Mostrar todos los hermanos: GOAL Respuesta:
PARTE 3: Desarrollando ms predicados: Ahora hay que completar mas predicados, por ejemplo: Maura es sobrino de Marcela y Marcela es ta de Maura por lo que es necesario desarrollar por lo que complete nuevos predicados Predicates tio(persona,persona). sobrino(persona,persona). Clauses
12
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
Quien es el to de Maria: GOAL Respuesta: Maura de quien es tio: GOAL Respuesta: Mostrar todos los tios: GOAL Respuesta: Quien es el sobrino de Marcela: GOAL Respuesta: Pati de quien es sobrino: GOAL Respuesta: Mostrar todos los sobrinos: GOAL Respuesta: PARTE 4: Desarrollando sus propios predicados y encontrando relaciones: Hasta ahora se supone se ha identificado ya ciertos rasgos familiares por lo que se presenta la siguiente propuesta de rbol familiar tomando en cuenta que el lazo de unin es: padre: % Familia 1: Familia 2: % pablo carlos % / \ | % juan marcela debora % / \ | % maria maura miguel % / \ % luis pati
13
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS Ahora se ve necesario identificar quien es familia de quien ya que pati no es familiar de Carlos por ejemplo, para esto se tendr que proponer el predicado familiar( , ) de manera que la respuesta a dar tendr que ser afirmativa en los casos necesarios por ejemplo: Goal familiar(maura,marcela). Respuesta: YES Goal familiar(pati,juan). Respuesta: YES Goal familiar(debora,Y). Respuestas: Y=miguel Y=carlos 2 Solutions Implementar los respectivos predicados. Despus de completados los predicados, realice las siguientes consultas: GOAL familiar("Marcela", "Maria") Respuesta: Por qu?: GOAL familiar("Juan","Marcela") Respuesta: Por qu?: GOAL familiar("Miguel","Marcela"). Respuesta: Por qu?: GOAL familiar("Pati","Juan"). Respuesta: Por qu?: GOAL familiar("Carlos","Miguel"). Respuesta: Por qu?: Goal familiar("Debora",Y).
Ing. Jennifer Rocio Pillaca De La Cruz. Ing. Elinar Carrillo Riveros
14
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS Respuesta: Por qu?:
TRABAJO APLICATIVO 1. Realice un rbol genealgico de su familia, que tenga desde hijo hasta tatarabuelo. 2. Del rbol genealgico de su familia realice los siguientes predicados: hijo, padre, hermano. Y en base a estos predicados realiza los siguientes predicados: casado_con, cuado, abuelo, nieto, to, sobrino, primo, bisabuelo, bisnieto, tatarabuelo, tataranieto, etc. 3. Haga una copia del ejercicio anterior y agregue los predicados varn y mujer. Desarrolle los mismos predicados del ejercicio anterior, pero considere el gnero masculino y femenino en cada uno de ellos. Ejemplo, hijo, hija, madre, padre, hermano, hermana, casado_con, cuado, cuada, abuelo, abuela, nieto, nieta, tio, ta, sobrino, sobrina, primo, prima, bisabuelo, bisabuelo, bisnieto, bisnieta, tatarabuelo, tatarabuela, tataranieto, tataranieta.
15
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS LABORATORIO 3 EJERCICIOS 1. La siguiente es la nmina de personal de una empresa: Departamento de ventas Mara: empleada / Juan : cadete Departamento de compras Nora: empleada / Pedro : cadete Departamento de administracin Ana: cadeta / Felipe : empleado Escribir un programa Prolog que modele a esta empresa, tal que puedan responderse las siguientes consultas: quines trabajan en el departamento de compras ? y en el de ventas ? dadas dos personas, trabajan en el mismo departamento? dadas dos personas a y b, puede a darle rdenes a b ? a puede darle rdenes a b si y slo si trabajan en el mismo departamento y a tiene un cargo superior a b. Se considera que empleado es un cargo superior a cadete. Escribir las consultas planteadas, y las respuestas que entregara el intrprete. b. Agregar un gerente para cada departamento. c. Agregar un gerente general. 2. Escribir un programa Prolog que pueda responder consultas sobre qu tipos de movimiento puede hacer un determinado animal. Tener en cuenta que: Las aves pueden volar (no tener en cuenta las excepciones). Los mamferos pueden caminar. Los felinos son mamferos que, adems, pueden correr. Los peces y los delfines pueden nadar. Los gatos son felinos. Los canarios son aves. Los perros son mamferos. Los peces espada son peces. e incluir a los siguientes animales como ejemplo : tweety es un canario. michifuz es un gato. fido es un perro. flipper es un delfn. cuchi es un pez espada.
Ing. Jennifer Rocio Pillaca De La Cruz. Ing. Elinar Carrillo Riveros
16
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
LABORATORIO 4 PREDICADOS DE ENTRADA / SALIDA En la presente prctica se presentarn una serie de casos en los cuales se demostrara el uso de funciones de entrada de cadenas de caracteres (variables) y las salidas de cadenas de caracteres (variables) adems del uso especfico del o lgica en la produccin de predicados. Vamos a introducir una nueva ampliacin sobre Prolog que no tiene nada que ver con la lgica. Hasta ahora, el nico modo de comunicar informacin a y desde Prolog es a travs del proceso de unificacin entre nuestras preguntas y las clusulas del programa. Pero puede que estemos interesados en una mayor interaccin entre programa y usuario, aceptando entradas del usuario y presentando salidas al mismo. As, aparecen los predicados de Entrada/Salida, que para mantener la consistencia del sistema cumplen: - se evalan siempre a verdad - nunca se pueden Resatisfacer: la reevaluacin continua hacia la izquierda - tiene un efecto lateral (efecto no lgico durante su ejecucin): entrada o salida de un carcter, trmino. SALIDA EN PROLOG. Write Permite mostrar caracteres y variables. Sintaxis write(Termino). Imprime el trmino T en la pantalla.
write(Termino),nl,fail.
17
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
Si no se ha de utilizar el fail cuando se muestra el texto de salida, empiezan a aparecer las ocurrencias de las bsquedas en forma repetida, de ah que al usar write se recomienda usar fail siempre al final. Ntese adems que siempre que utiliza fail se mostrara en la pantalla No al final por esa razn. Ejercicio 1. Muestre en pantalla un saludo personalizado 2. Muestre en pantalla: ********************* Ingeniera de Sistemas UNSCH ********************* Ejemplo: Implentar el siguiente cdigo en prolog. Domains persona = symbol Predicates nio(persona) %predicado nio joven(persona) %predicado joven adulto(persona) %predicado adulto muestra_texto %predicado para mostrar cadenas sin variables equivalente a procedimiento
un
muestra_nino(persona) %predicado para mostrar cadenas con una variable equivalente a una funcin muestra_joven(persona) muestra_adulto(persona) Clauses nio("Juan"). nio("Luis"). adulto("Mario"). adulto("Maritza"). adulto("Jorge"). joven("Carlos"). muestra_texto:-write("Probando ...."), write("Este es un texto"),nl,fail. muestra_nino(X):-nio(X),write("El nio es:",X),nl,fail. muestra_joven(X):-joven(X),write("El joven es:",X),nl,fail. muestra_adulto(X):-adulto(X),write("El adulto es:",X),nl,fail. goal
Ing. Jennifer Rocio Pillaca De La Cruz. Ing. Elinar Carrillo Riveros
18
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS muestra_texto. %muestra_nino(X). %muestra_joven(X). %muestra_adulto(X).
Registrar los resultados: 1. Quines son los nios? 2. Quines son los jvenes? 3. Quines son los adultos? ENTRADA EN PROLOG. readln(X). Lee un trmino introducido desde el teclado y lo unifica con su argumento X.
USO DEL O LGICO ; Antes de ingresar a una aplicacin especfica veamos una utilidad sencilla del o lgico, copie lo siguiente: Domains verdad = symbol Predicates mira(verdad) lee(verdad) checa(verdad) revisa(verdad) Clauses lee("Juan"). lee("Luis"). checa("Juan"). checa("Pedro"). mira("Juan").
Ing. Jennifer Rocio Pillaca De La Cruz. Ing. Elinar Carrillo Riveros
19
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS mira("Pablo"). revisa(X):- mira(X), lee(X), checa(X). Se supone que los predicados mira, lee y checa hacen lo mismo, ver si un nombre de una persona esta en la lista, apenas est una persona en la lista su presencia deber darse como verdadera (YES el resultado), si la clusula seria: revisa(X):- mira(X), lee(X), checa(X). Consultas: Verificar si Pedro revisa: Goal revisa("Pedro"). Respuesta: Por qu? Verificar si Pablo revisa: Goal revisa("Pablo"). Respuesta: Por qu? Verificar si Juan revisa: Goal revisa("Juan"). Respuesta: Por qu?
A pesar de que en el ltimo caso la respuesta es verdadera existe un error es que solamente tiene que existir un verdadero entre mira, lee o checa para que la respuesta total sea verdadera es as que la clusula debi de ser: revisa(X):- mira(X); lee(X); checa(X). Consultas: Verificar si Pablo revisa: Goal revisa("Pablo").
Ing. Jennifer Rocio Pillaca De La Cruz. Ing. Elinar Carrillo Riveros
20
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS Respuesta: Por qu? Verificar si Juan revisa: Goal revisa("Juan"). Respuesta: Por qu? mira( Lee( X) X) V V V V F F F F revisa(X):-mira(X), lee(X),checa(X). mira(X) ^ lee(X) ^checa(X) (AND) V V V V F F F V F F F F V V F V F F F V F F F F Recuerde: Verdad (V): YES y Falso (F): NOT checa( X) revisa(X):- mira(X); lee(X);checa(X). mira(X) v lee(X) v checa(X) (OR) V V V V V V V F
CONTINUANDO EL USO DEL O LGICO ;. En esta parte se desea mostrar como ingresando predicados relacionados en este caso amigo, se puede buscar cuales son los amigos entre personas, pero como es una relacin uno a uno en pares en ocasiones existe dificultades que se han de reparar con el o lgico, adems en esta parte se ha de ver nuevamente la utilidad de ingresar valores con readln y mostrar los resultados con write. Copie la siguiente secuencia de cdigos: Domains nombre = symbol Predicates amigo(nombre, nombre) % determina el amigo de alguien Clauses amigo("Juan", "Pablo"). amigo("Pablo", "Pipo"). amigo("Pablo", "Pedrito"). amigo("Lucho", "Juan"). Consultas:
Ing. Jennifer Rocio Pillaca De La Cruz. Ing. Elinar Carrillo Riveros
21
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS Quien es amigo de Pablo: Goal amigo(X, "Pablo"). Respuesta: Lucho de quien es amigo: Goal amigo("Lucho", Y). Respuesta:
Hasta aqu se ha constituido quien es amigo de quien, pero falta implementar la bsqueda de amigos, este debe de retornar todos los amigos de una persona por ejemplo. Amigos de Pablo: Juan, Pipo y Pedrito. Amigos de Juan: Lucho y Pablo Para saber quienes son amigos de alguien, se tendran que adicionar las siguientes clusulas: amigo("Pablo", "Juan",). amigo("Pipo", "Pablo"). amigo("Pedrito", "Pablo"). amigo("Juan", "Lucho"). Ejecute la siguiente consulta y obtendr el resultado que estaba buscando: Todos los amigos de Pablo: Goal amigo(X, "Pablo"). Respuesta: X: Juan X: Pipo X: Pedrito Obtenemos la respuesta que estbamos buscando, pero ES INCORRECTO, porque existe redundancia de datos: amigo("Juan", "Pablo"). amigo("Pablo", "Juan").
22
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
Predicates amigos(nombre, nombre) % determina los amigos de Izquierda a % derecha y de derecha a izquierda Clauses amigos(X, Y):-amigo(Y, X); amigo(X, Y). Ahora borre los predicados amigo que estn de ms y ejecute las siguientes consultas: Todos los amigos de Pablo: Goal amigos(X, "Pablo"). Respuesta: Todos los amigos de Juan: Goal amigos(X, "Juan"). Respuesta: Todos los amigos: Goal amigos(X, "Juan"). Respuesta: Ahora desarrollaremos una interfaz que permitir al usuario ingresar el nombre de una persona y se le devolver como resultado los amigos de esa persona. Agregue el siguiente cdigo: Predicates lee_nombre(nombre) % Lee el nombre de la persona muestra_amigos(nombre) % Lista los Amigo main % Predicado principal Clauses lee_nombre(X):-write("Ingrese el nombre: "), readln(X). muestra_amigos(X):-amigos(X,Y), write("El amigo de ", X, " es: ", Y), nl, fail. main:-lee_nombre(X), muestra_amigos(X). Consultas: Los amigos de Pablo (Consulte main y luego teclee el nombre de Pablo): Goal main. Respuesta:
23
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS Goal Respuesta: Explique como funciona el predicado main:
LABORATORIO 5 OPERACIONES ARITMETICAS PREDICADOS MATEMATICOS Los predicados matemticos utilizados en Prolog utilizan el formato estndar: relacin(objeto),o bien el usuario puede crear sus propios predicados, pero deber considerar que Prolog no maneja ciclos, sin embargo puede crear sus propias rutinas recursivas. Operaciones Operando 1 entero real entero real entero real entero entero Operador +, -, * +, -, * +, -, * +, -, * / div mod Operando 2 entero entero real real entero real entero entero Resultado entero real real real real entero entero
Orden de evaluacin Si la expresin contiene subexpresiones entre parntesis, las subexpresiones se evalan primero. Si la expresin contiene multiplicacin, divisin, suma o resta stas son realizadas de izquierda a derecha. Orden de evaluacin segn precedencia de los operadores. Operador
Ing. Jennifer Rocio Pillaca De La Cruz. Ing. Elinar Carrillo Riveros
Prioridad 24
Lab. Sistemas Expertos
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS +* / mod div - + (unario Funciones y predicados Nombre X mod Y X div Y abs(X) cos(X) sin(X) tan(X) arctan(X) exp(X) ln(X) log(X) sqrt(X) random(X) random(X, Y) round(X) trunc(X) val(domain,X) Comparaciones Smbolo < Relacin Menor que Descripcin Resto de X dividido entre Y. Cociente de X dividido entre Y. Valor absoluto de X. Coseno de X. Seno de X. Tangente de X. Arcotangente de X. e elevado al valor almacenado en X. (Exponencial). Logaritmo neperiano de X. Logaritmo en base 10 de X. Raz cuadrada de X. Almacena en X un nmero aleatorio real entre 0 y 1. Almacena en Y un nmero aleatorio en el intervalo 0 <= Y < X. Valor redondeado de X. El resultado es un nmero real. Valor truncado de X. El resultado es un nmero real. Conversin explcita entre dominios numricos. 1 2 3
25
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS <= = > >= <> o >< OPERACIONES ARITMTICAS. EJEMPLO 01: Realizar la suma de 2 nmeros: Menor o igual que igual que Mayor que Mayor o igual que distinto
Note que esto realiza la suma de dos nmeros, readint, permite ingresar enteros y readln que ingresacadenas, tambin existe readreal para nmeros reales, ntese tambin que se esta utilizando el predicado main. EJEMPLO 02: Realizar la siguiente operacin: S=((A*B)+A)/B. Si B es 0, que emita un mensaje de error de divisin.
26
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
27
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
EJERCICIO 01. Desarrolle la siguiente operacin: S = ((A * B) + (B * C))/(A * C) Tenga presente que tiene que leer POR TECLADO 3 nmeros: Domains Predicates Clauses Goal EJERCICIO 02: Escriba un programa que aleatoriamente genere un nmero positivo (entre 0 y 5) que luego Ud. adivine ingresndolo por teclado, debe considerar Mensaje de Felicitacin o mensaje de Fallo segn corresponda. El predicado para generar un nmero aleatorio es random/1 o random/2 random(X) - instancia X con un nmero real cualquiera random(100, X) - instancia X con un nmero entero positivo menor que 100 Domains Predicates Clauses Goal
Ing. Jennifer Rocio Pillaca De La Cruz. Ing. Elinar Carrillo Riveros
28
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS RECURSIVIDAD Y CICLOS A continuacin veremos una serie de programas con las que se plantea implementar bucles y ciclos basados en programacin lgica Recursividad: La recursividad es una tcnica de programacin importante. Se utiliza para realizar una llamada a una funcin desde la misma funcin. Las definiciones recursivas se encuentran frecuentemente en los programas Prolog. Algunos predicados de manejo de listas se definen recursivamente, es decir, el cuerpo de la clusula se llama a s mismo. En la recursividad debemos tener cuidado en que se cumplan las condiciones de lmite (punto de parada cuando utilizamos recursividad). Podemos observar que en la llamada de la clusula recursiva al menos uno de los argumentos crece o decrece, para as poder unificar en un momento dado con la clusula de la condicin de parada.
En la recursin encontramos dos partes: La primera parte en la que descendemos y construimos el rbol hasta encontrar el valor que unifica con la condicin de parada Una segunda parte en la que ascendemos por el rbol asignando valores a las variables que tenamos pendientes en las sucesivas llamadas. Deberemos tener cuidado de no escribir recursiones circulares (entrada en un bucle que no terminara nunca) y de evitar la recursin a izquierdas (cuando una regla llama a un objetivo que es esencialmente equivalente al objetivo original), que causaran que Prolog no terminara nunca. Recursin circular:
Recursin a izquierdas:
29
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
Mejore el programa anterior para que el nmero sea ingresado por teclado y el resultado sea mostrado de forma adecuada:
Domains Predicates Clauses Goal Ejemplo 02: A continuacin se muestra un programa que suma los nmeros enteros pares anteriores a un nmero entero ingresado por teclado . Ejemplo: Ingresamos el nmero 7 y el programa debe de sumar: 2 + 4 + 6 = 12
30
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
Consultas:
Ejemplo 03: Un programa que calcula el Factorial de un nmero entero cualquiera F=N*N-1*N-2*
31
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
Ejemplo 04: El siguiente programa realiza la multiplicacin en base a sumas. Copiar el siguiente cdigo y ejectelo. domains n=integer m=integer r=integer predicates mult(n,m,r) main clauses mult(X,0,0). mult(X,1,Z):- Z=X. mult(X,Y,Z):- Y1=Y-1,mult(X,Y1,Z1),Z=X+Z1. main:-write("MULTIPLICAIONES EN BASE A SUMAS "),nl, write("Ingrese Multiplicando "), readint(X),nl, write("Ingrese Multiplicador "), readint(Y),nl, mult(X,Y,Z), write("El Producto es ",Z),nl.
32
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
33
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
34
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS Ejemplo06: programa que permite hallar la suma de un nmero, producto, el exponencial, factorial, etc. Domains n=integer predicates nat(n) sum(n,n,n) prod(n,n,n) expo(n,n,n) menorigual(n,n) menor(n,n) min(n,n,n) fac(n,n) for(n,n,n) clauses nat(0):-!. nat(X):- X>0,X1=X-1,!,nat(X1). sum(X,0,X):- nat(X),!. sum(X,Y,Z):- Y1=Y-1,!,sum(X,Y1,Z1),Z=Z1+1. prod(X,0,0):- nat(X),!. prod(X,Y,Z):- Y1=Y-1,!,prod(X,Y1,W), sum(W,X,Z). expo(X,0,1):- X1=X-1,!,nat(X1). expo(0,Y,0):- Y1=Y-1,!,nat(Y1). expo(X,Y,Z):- Y1=Y-1,!, expo(X,Y1,W), prod(X,W,Z). menorigual(0,Y):- !,nat(Y). menorigual(X,Y):- X1=X-1,Y1=Y-1,!,menorigual(X1,Y1). menor(0,Y):- Y1=Y-1,!,nat(Y1). menor(X,Y):- X1=X-1,Y1=Y-1,!,menor(X1,Y1). min(X,Y,X):- menor(X,Y). min(X,Y,Y):- menor(Y,X). fac(0,1):- !. fac(X,Y):- X1=X-1,!,fac(X1,Z),prod(X,Z,Y). for(I,J,I):- I <= J. for(I,J,K):- I<J,I1=I+1,!,for(I1,J,K). goal expo(2,3,Z). EJERCICIOS PROPUESTOS 1. Desarrolle un programa que calcule el rea y el permetro de un crculo, rectngulo, tringulo, siguiendo un men 2. Desarrolle un programa que calcule lo siguiente:
4. Desarrolle un programa que compare si un nmero es mayor que otro, utilizando 3 variables. 5. Desarrolle un programa que calcule lo siguiente:
Ing. Jennifer Rocio Pillaca De La Cruz. Ing. Elinar Carrillo Riveros
35
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
Nota: Tenga en cuenta que son 3 variables (A, B, C) los cuales deben ser ingresados por teclado, el resultado debe ser con decimales y se debe de controlar lo siguiente: No existe divisin entre cero. No existe raz cuadrada de un nmero negativo. Si existen esos casos, mostrar el error correspondiente. 6. Mejorar el programa de nmeros aleatorios de manera que ofrezca un nmero mnimo y mximo por el que el usuario se ir guiando, hasta encontrar el nmero, es decir, hasta adivinarlo
36
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS LABORATORIO 6 LISTAS Las listas son una herramienta importante en la matemtica moderna y en la computacin simblica. El objetivo aqu es mostrar cmo pueden utilizarse las listas para acrecentar la potencia y el alcance de los programas PROLOG. Definicin.- Una lista es una estructura que contiene un nmero arbitrario de elementos. Una lista en Prolog corresponde a un arreglo en los otros lenguajes de programacin con la diferencia que la lista no requiere, previamente, conocer su longitud. La declaracin de un dominio para listas se efecta en la seccin de dominios de la siguiente manera: lista_de_elementos = elementos* Donde: elementos.- es un dominio estndar o un dominio definido por el usuario. lista_de_elementos.- es el nombre del nuevo dominio. Ejemplos: lcaracteres = char* lenteros = integer* ldatos = datos* datos = d(nombre, apellido) nombre, apellido = string MS SOBRE DECLARACIN DE LISTAS Para declarar un tipo lista enteros que consista de una lista de nmeros enteros, escribimos: domains lista_enteros = integer* Los elementos de una lista pueden ser a su vez listas (dando lugar a algo similar a los vectores multidimensionales de otros lenguajes de programacin). La nica restriccin es que todos los elementos de la lista deben ser del mismo tipo. Por ejemplo, esta declaracin: domains matriz = lista_enteros* lista_enteros = integer* La declaracin es perfectamente vlida, y sirve para disponer de un tipo matriz que consiste de una de listas de enteros (una matriz de enteros).
Ing. Jennifer Rocio Pillaca De La Cruz. Ing. Elinar Carrillo Riveros
37
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS Sin embargo, esta declaracin: domains lista_mixta = integer* ; symbol* No es vlida, incluso aunque la escribamos as: lista_mixta = elemento* elemento = integer ; symbol La forma correcta de declarar una lista que pueda contener nmeros enteros y secuencias de caracteres es: domains lista_mixta = elemento* elemento = i(integer); s(symbol) Una lista de este tipo podra ser esta: [i(3), s(pepe), i(6)]. A su vez, una lista se puede considerar de forma recursiva. Es decir, siempre est formada por un elemento seguido de otra lista. Cuando la lista tienen un slo elemento podemos considerar que est formada por dicho elemento y la lista vaca. Esta definicin es muy interesante, ya que su conocimiento nos permitir llevar a cabo todas las operaciones que se pueden realizar sobre las listas con poco esfuerzo. Hemos de recordar que en Prolog no existen estructuras para realizar bucles luego todos los algoritmos que representemos se definirn de forma recursiva. El hecho de que la implementacin de la lista sea tambin recursiva facilita la construccin de operaciones sobre la misma. 1. Listas como sujetos Hasta ahora hemos definido predicados que definieron a individuos simples: varon(juan). varon(pedro) mujer(mara). mujer(isabel). Donde: Juan, Pedro, Mara, Isabel son individuos particulares. Sin embargo, en el lenguaje corriente es comn la referencia a conjuntos de cosas. Supongamos deseamos expresar la frase: Los tomates, las papas, los zapallos y las coles son vegetales. Utilizando el concepto de listas, el predicado vegetales se aplicara a un solo sujeto, la lista completa: vegetales([tomates, papas, zapallos, coles]). Ing. Jennifer Rocio Pillaca De La Cruz. 38
Ing. Elinar Carrillo Riveros
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
Ejemplos de listas: vegetales([tomates, papas, zapallos, coles]. arcngeles([gabriel, michael, rafael]). vocales([a,e,o,[u,i]]). listavaca([]) 2. Estructura de una lista Una lista en Prolog (como en casi cualquier lenguaje que use listas) se divide en dos partes: (1) Cabeza. Es el primer elemento de la lista. Puede ser un tomo o una lista, pero a fin de cuentas es el primer elemento de la lista original. (2) Cola. Es el resto de los elementos de una lista, es de nuevo una lista. La cabeza y la cola de una lista se separan con el smbolo "|". Por ejemplo, la lista formada por los enteros 2, 5 y 7, es decir, [2, 5, 7] se puede escribir [2| 5, 7] donde la cabeza es el nmero 2 y la cola es la lista [5, 7]. Ms ejemplos: (1) L=[perro, gato, raton, queso] (a) cabeza= perro (b) cola=[gato, raton, queso] (2) L=[[perro, gato], [raton, queso]] (a) cabeza=[perro, gato] (b) cola=[[raton, queso]] (3) L=[perro] (a) cabeza=perro (b) cola=[] la lista vaca (4) L=[] (a) cabeza= NO (b) cola=[] la lista vaca 3. Listas de longitud fija Hacemos uso del patrn de lista. Un patrn no es ms que otra lista (compuesta en su mayor parte de variables), que intentan unificar con la primera. El intrprete con el fin de lograr dicha unificacin instancia las variables del patrn con los elementos de la lista. domains vegetal=Symbol* predicates vegetales(vegetal) clauses vegetales([tomate,zanahoria,apio,col]). goal vegetales([A,B,C,D]).
Ing. Jennifer Rocio Pillaca De La Cruz. Ing. Elinar Carrillo Riveros
39
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS Vemos al realizar la consulta: GOAL vegetales ([A,B,C,D]). A = tomates B = papas C = zapallos D = coles Otra consulta: vegetales([A|B]).
4. Listas de longitud desconocida Dada una lista de N elementos: [e1,e2,e3, , eN] El primer elemento se denomina la cabeza de la lista y el resto su cola. La cola a su vez, es una lista que puede dividirse nuevamente en cabeza y cola; y as continuando hasta llegar a la lista de un elemento cuya cola es vaca. De esta manera en los casos en que la longitud de la lista es desconocida es posible utilizar un patrn que permita separar la cabeza y la cola, este patrn se representa en Prolog de la siguiente manera: [Cabeza|Cola] Donde el smbolo | significa seguido de. La variable Cabeza se instancia con el primer elemento y la variable Cola se instancia con una lista formada por el resto de los elementos de la lista. Para el ejemplo anterior: Cabeza = e1 Cola = [e2,e3, , eN] 5. EJERCICIOS Ejercicio 01: El siguiente programa asigna una lista de valores a la variable ingresada.
40
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
Ahora agregue el siguiente cdigo al programa anterior: Predicates mostrar_lista_animales Clauses mostrar_lista_animales:-asignar_animales(LA), LA=[Cabeza|Cuerpo], write("La Cabeza es: ", Cabeza, " y el cuerpo es: ",Cuerpo). Tenemos el siguiente resultado
Ahora agregue el siguiente cdigo al programa anterior: Predicates nondeterm mostrar_todo(lelementos) nondeterm main Clauses mostrar_todo(LA):-LA=[Cabeza|Cuerpo], Cuerpo=[], write("El ltimo elemento es: ", Cabeza). %Condicion de parada mostrar_todo(LA):-LA=[Cabeza|Cuerpo],write("La Cabeza es: ", Cabeza, " y el cuerpo es: ", Cuerpo), nl, mostrar_todo(Cuerpo). main:-asignar_animales(LA),mostrar_todo(LA). Consulte Goal main. (ntese la recursividad)
41
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
VARIABLES ANNIMAS (GUIN BAJO). El guin bajo es una variable annima, permiten evitar mostrar los valores de las variables que ellas reemplazan, pero si actan haciendo uso de estas. EJEMPLO: A continuacin se muestra un ejemplo sobre padres con sus respectivos hijos. Copie el siguiente cdigo: Domains nombre = STRING Predicates nondeterm padre(nombre, nombre) mostrar_ph(nombre, nombre) Clauses padre("Jose","Rosa"). padre("Pedro","Manuel"). padre("Carlos","Maria"). padre("Javier","Luisa"). mostrar_ph(Padre, Hijo):-padre(Padre, Hijo), write(Padre, " es padre de ", Hijo), nl, fail. goal mostrar_ph(X,Y). Como se dar cuenta se muestra la lista de los padres con sus respectivos hijos: Agregue el siguiente cdigo al anterior: Predicates mostrar_padre(nombre) Clauses mostrar_padre(Padre):-padre(Padre,_), write(Padre, " es padre."), nl, fail. Consultas: Mostrar solo los padres:
Como se podr ver en el cdigo se esta realizando la consulta utilizando el siguiente predicado: padre(Padre,_), Ing. Jennifer Rocio Pillaca De La Cruz. 42 Lab. Sistemas Expertos
Ing. Elinar Carrillo Riveros
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS como se requiere solo el nombre del padre, utilizamos el guin bajo. Ejercicio 02. Predicado que devuelve el ltimo elemento de la lista: PREDICATES nondeterm ultimo_lis(lis_num, numero) CLAUSES ultimo_lis([Elem], Elem). ultimo_lis([_|Cuer], Elem):- ultimo_lis(Cuer, Elem).
Ejercicio 03: Predicado que devuelve yes cuando el dato ingresado es una lista: PREDICATES nondeterm es_lista(lis_num). CLAUSES es_lista([]). es_lista([_|_]).
6. Uso de la pertenencia para definir otras reglas tiles Consideremos esta pequea base de reglas: perros(pastor_aleman, [leskon, koki, titn]). perros(san_bernardo, [master, rigan, mujamad]). perros(chihuahua, [figaro, piojo, ramiro]). Para determinar la raza de determinado perro y ubicarlo como pastor alemn, san bernardo o chihuahua, primero es necesario establecer la raza y despus buscar en la lista de esa raza a ese perro. pastor_aleman(P):-perros(pastor_aleman, L), pertenece(P,L). Adems, podemos saber, si un tomo es un perro siempre tiene una raza (aunque sea corriente) as que podemos definir una regla para saber si un elemento es uno de los perros que hemos definido:
Ing. Jennifer Rocio Pillaca De La Cruz. Ing. Elinar Carrillo Riveros
43
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS perro(R):-perros(_,L), pertenece(R,L). Con la consulta :-perro(X). podemos determinar todos los perros que hemos definido. Enseguida el programa completo. perros(pastor_aleman, [juli, esteban, pancho]). perros(san_bernardo, [master, rigan, mujamad]). perros(french_poodle, [figaro, piojo, ramiro]). pertenece(E,L):-L=[E|_]. pertenece(E,[_|T]):-pertenece(E,T). pastor_aleman(P):-perros(pastor_aleman, L), pertenece(P,L). raza(R):-perros(_,L), pertenece(R,L). 7. Ejercicios Propuestos 7.1 Definir el predicado elimina si queremos eliminar un elemento de la lista: ?- elimina(1,[1,2,3,4],R). R = [2,3,4] 7.2 Uso de listas 7.2.1 Elena, Mnica, Ins, Clara, Teresa y Rosa son mujeres; Agustn, Francisco, Felipe y Bernardo son varones. Escriba. Escriba tal conocimiento usando listas, de modo que le permita que PROLOG responda si el nombre de una persona es varn o mujer. GOAL mujer(elena). Yes GOAL varon(francisco). Yes 7.2.2 Escriba ahora los predicados necesarios para establecer que Ud pueda introducir un nombre por el teclado y el programa deber decirle si el nombre ingresado corresponde a un varn o a una mujer. GOAL reconoce. Ingrese un nombre: monica. monica es mujer. 7.2.3 Ahora incrementa un predicado que permita dar un mensaje que indique que no se conoce si el nombre consultado corresponde a un varn a una mujer. GOAL reconoce. Ingrese un nombre: ricardo. No tenemos informacin sobre Ricardo. 7.2.4 Cmo definira el predicado pareja para determinar que posibles parejas se pueden formar entra los miembros de los conjuntos correspondientes 7.2.5 Defina el predicado matrimonio, que pueda listar todas las parejas posibles que puedan contraer matrimonio.
44
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS KAPPA PC El KAPPA Sistema de desarrollo de aplicaciones le permite escribir el software que simulan sistemas complejos y le proporcionan con facilidad representar conocimiento sobre ellos. KAPPA es utilizado para construir aplicaciones basadas en conocimiento, sistemas que capturan el conocimiento necesario para entender algn sistema complejo o dominio. Cuando se construye un sistema basado en conocimiento, se construye un modelo realista del sistema actual. Los sistemas basados en conocimiento son usados para tareas como planeamiento, diagnostico, diseo, capacitacin, interpretacin de datos y configuracin. Las bases de conocimiento de KAPPA se construyen alrededor de componentes importantes, conductas y relaciones en un sistema. Un candidato bueno para una base de conocimientos de KAPPA, es cualquier sistema donde se entienda como interactan los componentes, pero donde haya demasiada complejidad predecir el comportamiento del sistema entero. Kappa proporciona una amplia gama de herramientas para construir y usar sistemas basados en conocimiento. En el sistema KAPPA:
Donde los Objetos pueden ser clases o bien instancias de clases. Las relaciones entre los objetos en un modelo pueden ser representadas unindolos junto a una estructura llamada Jerarqua. Se usa programacin Orientada a Objetos dentro de KAPPA para dotar esos objetos con mtodos (es decir programas heredados). Una vez que se construido el objeto y los mtodos para una base de conocimientos, se puede construir sistemas que se especifican como los objetos deben comportarse. Aplicaciones de KAPPA Las aplicaciones estrictas en KAPPA pueden realizarse dos tareas importantes. Ellos pueden ser: Ayudar en la toma de decisin humana. Ello no lo reemplaza. As, la aplicacin que se escriba debe permitirle al usuario que entienda como un resultado o una decisin propuesta fue derivada. Ser usado para aprender. Un usuario puede examinar partes de un dominio que son inaccesibles en el mundo real. SISTEMA BASADOS EN CONOCIMIENTOS
Ing. Jennifer Rocio Pillaca De La Cruz. Ing. Elinar Carrillo Riveros
45
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS Las reas de mayor aplicacin de sistemas basados en conocimientos incluyen: Diagnostico y Clasificacin.- Usando los sistemas observables de un funcionamiento defectuoso, el sistema basado en conocimientos clasifica el problema subyacente. Diseo y Configuracin.- Usando criterios para una solucin aceptable el sistema basado en conocimiento disea una solucin para encajar el criterio. Planeamiento.- El sistema basado en conocimiento planea una secuencia de acciones o eventos que encontraran las incertidumbres de muchas personas, o algunas necesidades de ambos. Simulacin y Control de Procesos.- El sistema basado en conocimiento simula un sistema complejo indicando el estado dinmico que resulte de cambios de variable de control. Razonamiento Basado en Modelo La mayora de los primeros sistemas basados en conocimientos fueron llamados sistemas expertos diseados para producir soluciones computacionales a problemas que solamente el experto humano podra resolverlos. Estos sistemas usan reglas if-then para guardar el conocimiento de expertos humanos. Por ejemplo, el sistema de diagnostico medico MYCIN usa regla if-then para representar el conocimiento de doctores quienes se especializaron en enfermedades infecciosas. Esencialmente las reglas en MYCIN relacionan sntomas observados a la enfermedad o infeccin que podra ser la causa. IF el paciente tiene dolor de cabeza, y la cantidad de glbulos blancos del paciente es baja THE el paciente debe tener meningitis Estas reglas son resmenes tiles del conocimiento experto, pero ellos solo expresan la parte superficial del conocimiento. MICYN no tiene un modelo de cmo causas infecciones o los sntomas observados. Clases e Instancias Una clase es una coleccin, un grupo de instancias particulares. Autos podra ser una clase de los cuales AutoDeTom es una instancia. Las clases y las instancias son llamadas como objetos. Una subclase es una clase que es parte de o un subconjunto de otra clase; esta bajo una clase en una jerarqua. Sedans es una subclase Autos. Parent es el nombre para una clase que esta inmediatamente a una subclase en la jerarqua; Autos es el padre de Sedans. Ancestros y descendientes describen relaciones indirectas entre clases, subclases e instancias. 46
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS EJERCICIO I. Ejemplos: AutoDeMary es descendiente de Autos (y Autos es el ancestro de AutoDeMary). Atributos Los atributos pueden ser pensamientos como descripciones sobre un objeto particular. Ellos adicionan detalles, estructuras, listas, atributos o propiedades. Representando procesos: Mtodos, Funciones y Reglas Un sistema basado en conocimiento contiene tanto representacin de la estructura como del proceso de dominio. Los procesos de dominio son representados en tres diferentes formas: Mtodos Funciones Reglas Mtodos El primer acercamiento para presentar procesos en KAPPA involucra objetos as ellos representan el comportamiento de las cosas. El comportamiento es especificado creando mtodos. Los mtodos son escritos en KAL (Lenguaje de programacin KAPPA) y especifica como un objeto puede comportarse. Funciones KAPPA proporciona una librera por encima de las 240 funciones que permiten manipular la base de conocimientos. El rango de estas funciones van de operadores numricos simples tales como + a funciones lgicas tales como while y complejas, KAPPA especifica funciones tales como PostInputForm y ForwardChain. Reglas Una regla especifica las condiciones bajo las cuales una accin particular o inferencia puede ocurrir. Por ejemplo, las siguientes reglas indican las condiciones bajo las cuales las bujas de un automvil chispean: IF la ignicin est encendida, y el sistema elctrico est bien, y la condicin de las bujas estn bien THE las bujas chispean Las reglas pueden especificar complejas interacciones entre los componentes de un sistema. La regla del ejemplo anterior especifica una interaccin entre tres componentes de un automvil: la ignicin, el sistema elctrico y las bujas. La sintaxis para mtodos, funciones y reglas son idnticas: se usa la misma sintaxis para adicionar un objeto, escribir un mtodo y crear una regla.
47
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS Instalacin de Kappa PC. INRTEFAZ DE KAPPA VENTANAS Cuando empieza por primera vez KAPPA, se despliega la ventana principal de KAPPA con nueve iconos. Cada icono representa una de las nueve ventanas de KAPPA:
Object Browser Session Edit Tool KAL Interpreter KAL View Debugger Find Replace Rule Relations Rule Trace Inference Browser EL RATN La mayora de las operaciones en KAPPA moviendo el cursor en el objeto de la pantalla haciendo clic en el botn izquierdo del ratn. En KAPPA el botn derecho del ratn trabaja solo en dos instancias especficas: Cuando usted est en una ventana donde el lenguaje KAL puede ser usado; en este caso, haciendo clic en el botn derecho se desplegara un men, el Men de referencia de funcin.
LOS MENS Los mens son listas de rdenes de KAPPA. Los mens estn disponibles para cada ventana de KAPPA y para los iconos de KAPPA en la ventana de herramientas (Edit Tools).
48
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
CARGANDO UNA BASE DE CONOCIMIENTOS Siempre que se cree una base de conocimientos o se haga cambios a una existente, se debe grabar en un archivo. Cuando se grava en una base de conocimientos en KAPPA, se tienen dos opciones: se puede grabar como una ARCHIVO BINARIO (.bin) o como un archivo ASCII (.kal). Los dos tipos de archivos no son compatibles.
USANDO EL VISUALIZADOR DE OBJETOS (Object Browser) El visualizador de objetos es el mtodo ms intuitivo de interactuar con KAPPA:
El visualizador de objetos inicialmente aparece una clase llamada Root (Raiz), con subclases tales como Men, Image, KWindow y una instancia llamada Global.
La Clase Raz La clase raz es una clase fundamental de las cuales todas de las otras clases en KAPPA son definidas. No pueden ser renombradas ni borradas.
Ing. Jennifer Rocio Pillaca De La Cruz. Ing. Elinar Carrillo Riveros
49
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS La Clase Global La instancia Global es una instancia predefinida que se usa para ayudar a grabar tiempos para usar redes de objetos. La Subclase Men La subclase men es una subclase designada para almacenar imgenes. Las imgenes son objetos grficos que se usan para crear una interfaz de usuario para sus aplicaciones. La Subclase KWindows La subclase KWindows es una subclase designada para almacenar las definiciones de las ventanas en KAPPA. Esta subclase tiene definiciones por ejemplo el color de fondo de la ventana, posicin de dichas ventanas, las funciones de dibujo, etc. USANDO EL EDITOR (Edit Tools) El editor de clases e instancias, est representado con iconos en la ventana de herramientas de conocimiento, proporciona un medio ms rpido y ms eficiente para crear, editar y grabar bases de conocimientos.
La ventana de herramientas de conocimiento muestra iconos para cinco editores principales de KAPPA. Adems muestra el nmero total de tems de conocimiento que actualmente tiene la aplicacin. Estructura de los Cinco Editores: Clases. Instancias. Funciones. Reglas. Metas. Los editores Clase e Instancias contienen otros tres editores:
Atributos
Ing. Jennifer Rocio Pillaca De La Cruz. Ing. Elinar Carrillo Riveros
50
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS Opciones Editor de mtodos LIMITES DE VALOR Los lmites de valor dependen del tipo de valor, tales como los siguientes: - Si el tipo de valor es un Texto, los lmites son definidos por los valores en el campo de valores aceptables. Este puede ser alguna lista de cadenas. - Los valores de tipo Numrico tienen muchos numerales mnimos y mximos. - Los valores de tipo Boolean deben ser True o False (Verdadero o Falso). - Los valores de tipo Objeto, tienen lmites definidos por instancias. Valores Se puede ingresar un valor determinado dentro de la opcin Value(s), ya sea por un valor numrico o una cadena de texto. Ejemplo:
Tipo de Valor Seleccione una de las cuatro posibilidades para dar formato al tipo de valor, dentro de las opciones que tenemos:
Tipo de Texto Al seleccionar el tipo de valor, se puede ingresar valores posibles en la base de conocimiento para dicho atributo. Ejemplo:
Tipo Numrico Al seleccionar el tipo de valor, se puede ingresar valores mximos y mnimos para dicho atributo. Ejemplo:
51
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
Tipo Booleano Al seleccionar este tipo de valor, se puede ingresar valores para tipo booleano tales como cero y uno. Ejemplo:
Tipo Objeto Al seleccionar el tipo de valor, se puede ingresar las clases posibles como valores en la base de conocimiento para dicho atributo. Ejemplo:
LABORATORIO 09 Se desea realizar un sistema esperto que ayude a decidir a una persona(Turista); del lugar a viajar tomado en cuenta el tipo de viaje, cantidad disponible, motivo de viaje. 1. Crear la subclase Viaje y las siguientes subclases respectivamente
52
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
2.
Crear las siguientes variables (Slot) en las subclases Viaje nombre Tipo_tour destino values(Espaa_Suiza_Roma_vaticano_Portuga) motivo tipo cantidad lugar locomocin preferencia ciudad Precio Destino Locomocin Pref_destino Pref_lugar
3.
53
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
4.
54
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
5.
55
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
6.
56
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS 7. Crear las siguientes reglas. Regla1 If ( Destino:lugar = Amrica ) And ( Tipo_tour:tipo = Monumental ) And ( Precio:cantidad = 10000 ); Else Tipo_tour:destino = NewYork_Mexico; Regla2 If ( Destino:lugar = Amrica ) And ( Tipo_tour:tipo = Placer ) And ( Precio:cantidad = 10000 ); Else Tipo_tour:destino = RioDeJaniero_Santigo_Cancn; Regla3 If ( Destino:lugar = Amrica ) And ( Tipo_tour:tipo = Monumental_Placer ) And ( Precio:cantidad = 10000 ); Else Tipo_tour:destino = Cusco_Mexico; Regla4 If ( Destino:lugar = Amrica ) And ( Tipo_tour:tipo = Indiferente ) And ( Precio:cantidad = 10000 ); Else Tipo_tour:destino = Cusco_Mexico_Hollywood_RioDeJaniero; Regla5 If ( Destino:lugar = Europa ) And ( Tipo_tour:tipo = Monumental ) And ( Precio:cantidad = 20000 ); Else Tipo_tour:destino = Roma_Vaticano; Regla6 If ( Destino:lugar = Europa ) And ( Tipo_tour:tipo = Placer ) And ( Precio:cantidad = 20000 ); Else Tipo_tour:destino = Alemania_Inglaterra_Francia; Regla7 If ( Destino:lugar = Europa ) And ( Tipo_tour:tipo = Monumental_Placer ) And ( Precio:cantidad = 20000 ); Else Tipo_tour:destino = Espaa_Suiza; Regla8 57
Lab. Sistemas Expertos
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS If ( Destino:lugar = Europa ) And ( Tipo_tour:tipo = Indiferente ) And ( Precio:cantidad = 20000 ); Else Tipo_tour:destino = Espaa_Suiza_Roma_vaticano_Portugal; Regla9 If Precio:cantidad <= 5000; Else Tipo_tour:motivo = visita; Regla10 If Precio:cantidad <= 10000; Else Tipo_tour:motivo = Monumental; Regla11 If Precio:cantidad <= 15000; Else Tipo_tour:motivo = Placer; Regla12 If Precio:cantidad > 15000; Else Tipo_tour:motivo = Monumental_Placer; Crear las siguientes funciones. resultado { HideWindow( SESSION ); ShowWindow( Session1 ); Assert( Pref_lugar, ciudad ); Assert( Precio, cantidad ); Assert( Destino, lugar ); Assert( Tipo_tour, tipo ); Assert( Tipo_tour, motivo ); ForwardChain( NULL, Regla1, Regla2, Regla3, Regla4, Regla5,Regla6, Regla7, Regla8, Regla9, Regla10, Regla11, Regla12 ); ClearTranscriptImage( Transcript1 ); DisplayText( Transcript1, FormatValue( "El destino puede ser: %s", Tipo_tour:destino ) ); DisplayText( Transcript1, FormatValue( " \n\n\n" ) ); DisplayText( Transcript1, FormatValue( "El motivo puede ser: %s", Tipo_tour:motivo ) ); DisplayText( Transcript1, FormatValue( " \n\n\n" ) ); DisplayText( Transcript1, FormatValue( " \n\n\n\n\n Que tenga un feliz viaje " # "\n\tDate : \t" # Date( ) # "\n\tHora :\t" # Time( ) ) ); 58
Lab. Sistemas Expertos
8.
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS };
reset { ResetValue( Destino, lugar ); ResetValue( Tipo_tour, tipo ); ResetValue( Precio, cantidad ); ResetValue( Locomocin, locomocin ); ResetValue( Pref_lugar, ciudad ); ResetValue( Viaje, Nombre ); };
59
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
LABORATORIO 10 Se desea realizar un sistema experto para identificar un animal, segn el grfico que se tiene. Es muy grande? No Si
Si
60
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
9.
Crear la subclase Animal, con los siguientes slots Animal indicador (Son las respuestas de Si o No) pregunta (Son las preguntas que se hace) supone (Es la respuesta del supuesto animal que es )
10.
61
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
11.
Crear las reglas necesarias r1 If Animal:pregunta #= "Es muy grande?" And Animal:indicador #= No; Then { 62
Lab. Sistemas Expertos
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS Animal:pregunta = "Lanza chillidos?"; HideWindow( SESSION ); ShowWindow( Session1 ); }; r2 If Animal:pregunta #= "Es muy grande?" And Animal:indicador #= Si; Then { Animal:pregunta = "Tiene cuello largo?"; HideWindow( SESSION ); ShowWindow( Session2 ); }; r3 If Animal:pregunta #= "Lanza chillidos?" And Animal:indicador #= Si; Then { Animal:supone = "Supone que es un raton"; HideWindow( Session1 ); ShowWindow( Session5 ); }; r4 If Animal:pregunta #= "Lanza chillidos?" And Animal:indicador #= No; Then { Animal:supone = "Supone que es una ardilla"; HideWindow( Session1 ); ShowWindow( Session5 ); }; Crear las funciones necesarias. f1 (Siguiente de SESSION) { Assert( Animal,pregunta ); Assert( Animal,indicador ); Assert( Animal,supone); ForwardChain( NULL, r1, r2 ); };
12.
63
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA ESCUELA DE FORMACIN PROFESIONAL DE INGENIERA DE SISTEMAS
64