guiame4 prolog

Upload: shabedekam

Post on 31-May-2018

217 views

Category:

Documents


0 download

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