Práctica No.

6
Ejercicios en Prolog.
Introducción
El lenguaje Prolog (Programación Lógica) puede ser visto como un lenguaje prescriptivo asi como un lenguaje descriptivo.
El enfoque de Prolog es describir un conjunto de hechos conocidos y un conjunto de relaciones entre esos hechos
respecto al problema a solucionar, más que describir la secuencia de pasos que debe seguir la computadora para
resolver el problema. Prolog tiene implementada cierta “inteligencia” para resolver el problema (esta “inteligencia” es un
mecanismo de razonamiento automático llamado “motor de inferencia” basado en un algoritmo que se conoce como
resolución).
Un programa en Prolog consiste de un conjunto de claúsulas, donde cada claúsula es, o un hecho o una regla acerca de
como puede inferirse alguna solución para los hechos dados.
esposos

francisco
padres
mario

victoria
padres

esposos

esposos
alicia

eduardo

padres

veronica

padres
luis

beatriz
Figura 1.- Una bonita familia.

Actividades
1.- Captura las siguientes claúsulas y guarda el archivo con el nombre familiares.pl (que representa las
relaciones familiares mostradas en la Figura 1).
/*
Archivo: Familiares.pl
Clausualas sobre una familia y reglas para determinar las relaciones
familiares
*/
varon(eduardo).
varon(francisco).
varon(luis).
varon(mario).
mujer(alicia).
mujer(veronica).
mujer(victoria).
mujer(beatriz).
padres(eduardo,francisco,victoria).
padres(alicia,francisco,victoria).
padres(luis,eduardo,veronica).
padres(beatriz,alicia,mario).
esposos(eduardo,veronica).

X).mujer(Ella).hijo(P.Ella).X):. Consulta en Prolog: _____________________________________________________ true Resultados: __________________________________________________________ b) ¿Quienes son los padres de Beatriz? padres(beatriz.padres(Ella. Consulta en Prolog: _____________________________________________________ Resultados: __________________________________________________________ X = alicia.((hijo(M.esposos(mario. c) ¿Eduardo es hijo de Mario? hijo(eduardo.El)).Para cargar el programa contenido en el archivo familiares. hermano(El.alicia). hermana(Ella. (hija(M. Consulta en Prolog: _____________________________________________________ X = alicia .Ejecuta el intérprete de Prolog dando click sobre su ícono (tecleando pl.Ella). .padres(X.P). tecleamos: consult('familiares.pl.padres(X.X).mujer(Ella).3.P)._). hijo(El. (hija(M.pl').P).X) :.El).Ella)))._.((hijo(M.X.varon(El).X):varon(El).. 2.hijo(P. hija(Ella.1.Y).El))).alicia).X).hija(P.veronica).El))).El)). Resultados: __________________________________________________________ d) ¿Luis es hijo de Verónica? hijo(luis.Define reglas para las relaciones nieto y nieta.M. Consulta en Prolog: _____________________________________________________ true Resultados: __________________________________________________________ e) ¿De quien es hija Beatriz? hija(beatriz.2._). Consulta en Prolog: _____________________________________________________ false.P).M.P). hija(Ella. Regla para nieto: _______________________________________________________ Regla para nieta: _______________________________________________________ 2.mujer(Ella).padres(Ella. ejecútalas y reporta los resultados: a) ¿Eduardo y Alicia son hermanos? hermanos(eduardo.Defina reglas para la relación abuelo y abuela Regla para abuelo: ______________________________________________________ Regla para abuela: ______________________________________________________ abuelo(El._.padres(X.X) :.M.M. desde una terminal X en Linux) 2. O también puede cargarse tecleando: ['familiares.victoria).M.((hijo(M.padres(El..El).mujer(Ella).“Convierte” a Prolog las siguientes preguntas.P).padres(El.X) :.M.X) :.X) :. (hija(M.El).El). padres(X.hijo(P.X) :.pl'] 2. abuelo(El. 2..4.mario).X. hijo(El..X):varon(El).Ella)).hija(P.M.varon(El).padres(Ella. abuela(Ella.padres(El.varon(El). Resultados: __________________________________________________________ X = mario.padres(X.. esposos(francisco.hija(P.P). Y = mario.X.

.. Y = eduardo Y = alicia .X):. lee_libro(maria). modifica el archivo familares..Y).alicia) sobrino(X.hermano(X.hermana(X.pl para agregar las reglas definidas en los pasos anteriores. lee_libro(alfredo).preparado_para_examen(X). X = beatriz .pl % Predicados aprueba_examen(X) :.preparado_para_examen(Y).X).. X = francisco . Codifícala en Prolog. Resultados: ____________________________________________________________ 2. persona(tomas). 3.Y). false.asiste_a_clases(X).X):. guarda el archivo.hijo(El. abuela(X. persona(juan).Y). ____________________________________________________________________ sobrina(X. cuñado o cuñada. ____________________________________________________________________ sobrina(X.pl y prueba que la relación está bien definida por medio de varias preguntas. c) ¿De quien es nieto Luis? ?. sobrina(X.examen_facil.X).Y). Consulta en Prolog: _______________________________________________________ X = luis .Y).eduardo). aprueba_examen(X) :.Y). luis . preparado_para_examen(X) :. % Proposiciones persona(maria). false. X = luis.abuelo(X.hija(Ella. ____________________________________________________________________ sobrino(X. sobrina. Relación: __________________________________________________________ Sobrina y sobrino sobrina(Ella.eduardo).alicia). preparado_para_examen(X) :. Consulta en Prolog: _______________________________________________________ X = victoria .Captura el siguiente programa que ilustra cómo aprobar un examen: % Archivo: aprexamen.X). Resultados: ____________________________________________________________ d) ¿Francisco es abuelo de Beatriz? abuelo(francisco.X) false. realiza_ejercicios(X).Edita el archivo familares.5. persona(alfredo). Consulta en Prolog: _______________________________________________________ true . cárgalo nuevamente en el intérprete de Prolog y realiza las siguientes consultas: a) ¿Eduardo es abuelo? abuelo(eduardo. Codificación:____________________________________________________________ sobrino(El. preparado_para_examen(X) :. sobrina(beatriz.2. lee_libro(X). ___________________________________________________________________ Preguntas y resultados: sobrina(X.tutor(Y. persona(susana). Resultados: ____________________________________________________________ X = beatriz .sabe_todo(X). Consulta en Prolog: _______________________________________________________ false Resultados: ____________________________________________________________ b) ¿Victoria es abuela? abuela(victoria.6. sobrino(X.persona(X). X = eduardo .luis).Define al menos 2 de las siguientes relaciones: sobrino.beatriz). ____________________________________________________________________ X = beatriz.luis).francisco).

susana).1. X = juan . Consulta en Prolog: ________________________________________________________ true Resultados: _____________________________________________________________ b) ¿Está Susana preparada para el examen? Consulta en Prolog: ________________________________________________________ preparado_para_examen(susana). entonces X está encima de Y. iii) La taza está arriba del libro. Consulta en Prolog: ________________________________________________________ X = alfredo . 4. entonces Y soporta a X.Codifica en Prolog y realiza las siguientes consultas: a) ¿Aprueba el examen Juan? aprueba_examen(juan).Escribe un programa en Prolog que use esta base de conocimiento y muestre que SOPORTA(libro.juan). realiza_ejercicios(maria). Programa en Prolog: ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ .. 3..Dada la siguiente información: X = susana i) Si X está encima de Y. Resultados: _____________________________________________________________ d) ¿Quiénes aprueban el examen? aprueba_examen(X) X = tomas . iv) La taza toca al libro. 4.taza) es verdadero. Resultados: _____________________________________________________________ true c) ¿Quién es el sabio del grupo? sabe_todo(X). Resultados: _____________________________________________________________ X = maria .asiste_a_clases(alfredo). realiza_ejercicios(alfredo).. tutor(juan.1. asiste_a_clases(maria). ii) Si X está arriba de Y y se tocan una y otra. tutor(maria. sabe_todo(tomas). Consulta en Prolog: ________________________________________________________ X = tomas.

taza) 4.4.4.- 5.- V: ____ F: ____ Comentarios y conclusiones ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ .3.- Convierte a Prolog la pregunta: ¿Qué soporta a la taza? Pregunta en Prolog: _____________________________________________ Respuesta: _____________________________________________________ Convierte a Prolog la pregunta: ¿Qué esta encima del libro? Pregunta en Prolog: ____________________________________________ Respuesta: ____________________________________________________ 4.2.- SOPORTA(libro.