Laboratorio 5: PROLOG (2)

Ejercicios:

ATENCION: Los ejercicios obligatorios son: 1,2,3,4,5,6(a-e).  

1. Definir la relacion max(X,Y,Max) tal que Max es el mayor de los números X e Y. 
2. Definir el predicado maxlist(List,Max) tal que Max es el mayor número de la lista List. 
3. Definir el predicado sumlist(List,Sum) tal que Sum es la suma de la lista de enteros List. 
4. Calcular height(Tree,Height) tal que Height es la altura del arbol. Se puede definir como el máximo de la altura de sus ramas. 
5. Calcular la relacion treetolist(Tree,List) que convierta una árbol en una lista. 
6. Dada una base de datos con las siguientes características: 
                                        vuelo(NRO,ORIGEN,DESTINO,HORA_P,HORA_LL,avion(MARCA,EDAD)) 

     Elabore reglas de inferencia para: 

        a.Indicar si hay vuelo directo entre dos ciudades. 
        b.Dada una ciudad, obtener la información de los vuelos que salen de ella. 
        c.Dado un vuelo, indicar la ciudad de partida y de llegada. 
        d.Dados un origen y un destino indicar sólo una ruta posible que tenga una escala. 
        e.Indicar los pares de ciudades que están conectadas con vuelos en ambos sentidos. 
        f.  Dados un origen y un destino indicar las posibles rutas incluyendo escalas (lista). 
 

7. Utilizando el ejemplo de las habitaciones, y los ejemplos de iteracion y acceso a datos, hacer un juego sencillo en PROLOG.  Se crearan varias habitaciones conectadas por puertas, con objetos en cada habitacion. Puede haber objetos dentro de otros. Crearemos instrucciones para movernos entre habitaciones y para coger objetos (que se almacenaran en una lista). El juego consistira en encontrar tres objetos (llaves), cogerlos,  y llevarlas a una habitacion en concreto (Caja fuerte). Si llegamos con las tres llaves y accionamos la palanca habremos ganado el juego. 
8.  Hacer el ejemplo de la granja de animales de los guiones de Java y Smalltalk en Prolog. (Opcional) 
 

Ayuda al ejercicio 7:
 

room(kitchen). 
room(office). 
room(hall). 
room('dining room'). 
room(cellar). 

door(office, hall). 
door(kitchen, office). 
door(hall, 'dining room'). 
door(kitchen, cellar). 
door('dining room', kitchen). 

location(desk, office). 
location(apple, kitchen). 
location(flashlight, desk). 
location('washing machine', cellar). 
location(nani, 'washing machine'). 
location(broccoli, kitchen). 
location(crackers, kitchen). 
location(computer, office). 
turned_off(flashlight). 
here(kitchen). 

say(X):-write(X),nl,fail. 
 

do(say(X)):-say(X),!. 
do(end). 

command_loop:- 
     repeat, 
     write('Enter end to exit): '), 
     read(X),do(X), 
     X = end.