guiame4 prolog
TRANSCRIPT
-
8/14/2019 guiame4 prolog
1/9
Universidad Nacional del Altiplano PunoEscuela Profesional de Ingeniera de Sistemas
CURSO: INTELIGENCIA ARTIFICIAL
GUA ACADMICA Nro. 4
TEMA: ENTRADA Y SALIDA ; USO DEL OR
Apellidos y Nombres: Nro. Matrcula: .OBJETIVOS:
Comprender las entradas y salidas de prolog
Uso de OR.
REQUERIMIENTOS:
PC con Windows y Visual Prolog
PROCEDIMIENTO
En la presente prctica se presentarn una serie de casos en los cuales sedemostrara el uso de funciones de entrada de cadenas de caracteres(variables) y las salidas de cadenas de caracteres (variables) adems del usoespecfico del o lgica en la produccin de predicados.
PARTE 1: SALIDA EN PROLOG.
Seria equivalente a decir cout
-
8/14/2019 guiame4 prolog
2/9
Universidad Nacional del Altiplano PunoEscuela Profesional de Ingeniera de Sistemas
CURSO: INTELIGENCIA ARTIFICIAL
Goal muestra_nino(X).
Resultado:
Porque muestra dos lneas de respuesta la segunda consulta?:
Para que se utiliza:nl:
fail:
Recomendacin: si no se ha de utilizar el fail cuando se muestra el texto desalida, empiezan a aparecer las ocurrencias de las bsquedas en formarepetida, de ah que al usar write se recomienda usar fail siempre al final.
Ntese adems que siempre que utiliza fail se mostrara en la pantallanot solucion al final por esa razn.
Ahora se desea mostrar una serie generada con una lista de juegos con todaslas combinaciones entre tres posibles jugadores que se han de enfrentar, paralo cual copie el siguiente cdigo:
Domainsnino = symbol
Predicatesnino(symbol)juegan(nino,nino)
Clausesnino("Juan").nino("Luis").nino("Carlos").juegan(X,Y):-nino(X),nino(Y), XY,write(X," juega vs.",Y), nl,fail.
Consulta:
Mostrar todos los que se enfrentan:Goal juegan(S,T).
Respuesta:
Explique como funciona el predicado juegan:
2
-
8/14/2019 guiame4 prolog
3/9
Universidad Nacional del Altiplano PunoEscuela Profesional de Ingeniera de Sistemas
CURSO: INTELIGENCIA ARTIFICIAL
3
-
8/14/2019 guiame4 prolog
4/9
Universidad Nacional del Altiplano PunoEscuela Profesional de Ingeniera de Sistemas
CURSO: INTELIGENCIA ARTIFICIAL
PARTE 2: ENTRADA EN PROLOG.
Seria equivalente a decircin>> en C++, su equivalente es readln, se utilizarapara este caso un ejemplo en el que se propondr el ingreso de una variable
por entrada simple que ha de ser reutilizada para escribir un texto con estaincluida con la salida estndarwrite.
Domainsnino = symbol
Predicatesescribe(nino).lee(nino).
Clausesescribe(X):-write("Ingrese el nombre del nio: "), lee(X),write("El Nombre ingresado es: ",X), nl, fail.
lee(S):-readln(S).
Consulta:Ejecutar la siguiente consulta:Goal escribe(X).
Respuesta:
Descripcin: El predicado escribe llama al predicado lee, el cual lee lavariable S de la ventana con readln (este resultado tendr que retornarverdadero por lo que no utilice fail), a continuacin write es utilizado paraescribir la variable S que llego como X que se coloca con la expresin Elnombre ingresado es: , X, esto prueba la utilidad de readln para ingresarvariables las cuales no solo se pueden utilizar para mostrar las variables por lapantalla si no para trabajarlas en predicados.
Recurdese: que al utilizar , es equivalente a y logico y los predicadosestn cumplindose para todos los resultados verdaderos, parando con el fail,ahora ser necesario distinguir del uso de el ;, o lgico poco utilizado peronecesario.
4
-
8/14/2019 guiame4 prolog
5/9
Universidad Nacional del Altiplano PunoEscuela Profesional de Ingeniera de Sistemas
CURSO: INTELIGENCIA ARTIFICIAL
PARTE 3: USO DEL O LGICO ;
Antes de ingresar a una aplicacin especfica veamos una utilidad sencilla delo lgico, copie lo siguiente:
Domainsverdad = symbol
Predicatesmira(verdad)lee(verdad)checa(verdad)revisa(verdad)
Clauseslee("Juan).lee("Luis).checa("Juan").
checa("Pedro").mira("Juan").
mira("Pablo").
% Faltando por definir el predicado revisa:
Se supone que los predicados mira, lee y checa hacen lo mismo, ver si unnombre de una persona esta en la lista, apenas est una persona en la lista supresencia deber darse como verdadera (YES el resultado), si la clusulaseria:
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?
5
-
8/14/2019 guiame4 prolog
6/9
Universidad Nacional del Altiplano PunoEscuela Profesional de Ingeniera de Sistemas
CURSO: INTELIGENCIA ARTIFICIAL
A pesar de que en el ltimo caso la respuesta es verdadera existe un error esque solamente tiene que existir un verdadero entre mira, lee o checa para quela 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").
Respuesta:
Por qu?
Verificar si Juan revisa:Goal revisa("Juan").
Respuesta:
Por qu?
mira(X)
Lee(X)
checa(X)
revisa(X):-mira(X),lee(X),checa(X).
mira(X) ^ lee(X) ^checa(X)
(AND)
revisa(X):- mira(X);lee(X);checa(X).
mira(X) v lee(X) v checa(X)
(OR)
VVVVFFFF
VVFFVVFF
VFVFVFVF
VFFFFFFF
VVVVVVVF
Recuerde: Verdad (V): YES y Falso (F): NOT
PARTE 4: CONTINUANDO EL USO DEL O LGICO ;.
En esta parte se desea mostrar como ingresando predicados relacionados eneste caso amigo, se puede buscar cuales son los amigos entre personas,pero como es una relacin uno a uno en pares en ocasiones existe dificultadesque se han de reparar con el o lgico, adems en esta parte se ha de vernuevamente la utilidad de ingresar valores con readln y mostrar los resultadoscon write.
6
-
8/14/2019 guiame4 prolog
7/9
Universidad Nacional del Altiplano PunoEscuela Profesional de Ingeniera de Sistemas
CURSO: INTELIGENCIA ARTIFICIAL
Copie la siguiente secuencia de cdigos:
Domainsnombre = symbol
Predicates
amigo(nombre, nombre) % determina el amigo de alguienClauses
amigo("Juan", "Pablo").amigo("Pablo", "Pipo").amigo("Pablo", "Pedrito").amigo("Lucho", "Juan").
Consultas:
Quien es amigo de Pablo:
Goal amigo(X, "Pablo").
Respuesta:
Lucho de quien es amigo:Goal amigo("Lucho", Y).
Respuesta:
Hasta ac se ha constituido quien es amigo de quien, pero falta implementarla 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 lassiguientes 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: JuanX: PipoX: Pedrito
7
-
8/14/2019 guiame4 prolog
8/9
Universidad Nacional del Altiplano PunoEscuela Profesional de Ingeniera de Sistemas
CURSO: INTELIGENCIA ARTIFICIAL
Obtenemos la respuesta que estbamos buscando, pero ES INCORRECTO,porque existe redundancia de datos:
amigo("Juan", "Pablo").amigo("Pablo", "Juan").
Lo correcto es declarar el siguiente predicado:
Predicates
amigos(nombre, nombre) % determina los amigos de Izquierda a
% derecha y de derecha a izquierdaClauses
amigos(X, Y):-amigo(Y, X); amigo(X, Y).
Ahora borre los predicados amigo que estn de ms y ejecute las siguientesconsultas:
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 nombrede 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 principalClauses
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).
8
-
8/14/2019 guiame4 prolog
9/9
Universidad Nacional del Altiplano PunoEscuela Profesional de Ingeniera de Sistemas
CURSO: INTELIGENCIA ARTIFICIAL
Consultas:
Los amigos de Pablo (Consulte main y luego teclee el nombre de Pablo):Goal main.
Respuesta:
Los amigos de Juan:Goal
Respuesta:
Explique como funciona el predicado main:
CONCLUSIONES
RECOMENDACIONES
9