% PD-99: practica-1.pl
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Introducci\'on: Esta pr\'actica consta de dos partes:
%
% (1) En la primera parte construiremos paso a paso el programa "menu.pl"
%     en el que se describen las diferentes comidas de un restaurante y
%     c\'omo podemos obtener informaci\'on sobre ella.
%
% (2) En segundo lugar veremos la traza de algunas preguntas al programa
%     "menu" con el predicado "trace".
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ejercicio 1: Para empezar a trabajar con Prolog vamos a realizar un
% primer ejemplo que describe la carta de un restaurante. Los objetos que
% interesan son los platos que se pueden consumir y una primera
% clasificaci\'on puede ser la siguiente:
% * Entradas: paella, gazpacho, consom\'e
% * Carne: filete de cerdo, pollo asado
% * Pescado: trucha, bacalao
% * Postre: flan, nueces con miel, naranja
%
% Escribe como programa Prolog la clasificaci\'on de comidas   
% del restaurante. El programa constara de 10 cl\'ausulas y los predicados  
% a usar son entrada/1, carne/1, pescado/1 y postre/1.                    
% Prueba despu\'es el programa con preguntas como                           
%    ?- carne(X).                                                         
%    ?- carne(X), postre(X).                                                
%     ... etc...                                                          
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ejercicio 2: Definir la relaci\'on "plato_principal(X)" que indicara que 
% un plato principal es un plato de carne o de pescado.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ejercicio 3: Definir la relaci\'on "comida(X,Y,Z)" que indicara que la 
% comida consta de tres platos, una entrada "X", un plato  principal "Y" y 
% un postre "Z". 
% 
% Pidi\'endole respuestas sucesivas a la pregunta ?- comida(X,Y,Z).
% podemos generar todas las posibles comidas del restaurante.  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ejercicio 4: 
% (a) ¿C\'omo se pregunta por las comidas con pescado sin modificar el 
%     programa?
% (b) ¿C\'omo se pregunta por las comidas con naranja sin modificar el 
%     programa?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ejercicio 5: Para completar un poco la informaci\'on que tenemos sobre las
% comidas del restaurante vamos a mirar la lista de las calor\'ias que aporta
% cada plato: 
% * Una raci\'on de paella aporta 200 calor\'ias           
% * Una raci\'on de gazpacho aporta 150 calor\'ias         
% * Una raci\'on de consom\'e aporta 300 calor\'ias          
% * Una raci\'on de filete de cerdo aporta 400 calor\'ias  
% * Una raci\'on de pollo asado aporta 280 calor\'ias      
% * Una raci\'on de trucha aporta 160 calor\'ias           
% * Una raci\'on de bacalao aporta 300 calor\'ias          
% * Una raci\'on de flan aporta 200 calor\'ias             
% * Una raci\'on de nueces con miel aporta 500 calor\'ias  
% * Una raci\'on de naranja aporta 50 calor\'ias           
%
% Definir la relacion "calorias(X,N)" que indicar\'a  que una raci\'on de "X" 
% tiene "N" calor\'ias.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ejercicio 6: Definir la relacion "valor_calorico(X,Y,Z,V)"  que indicar\'a
% que la comida comida(X,Y,Z) suma en total "V" calor\'ias.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ejercicio 7: Definir la relacion "comida_equilibrada(X,Y,Z)" que indicar\'a
% que la comida comida(X,Y,Z) no supera las 800 calor\'ias.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ejercicio 8: Vamos a ver como se plantea Prolog los distintos objetivos a
% lo largo de una deducci\'on y como llega a la respuesta final. Esto lo
% hacemos con el predicado "trace". Una vez cargado el predicado
% obtendremos informaci\'on detallada de todos los pasos.
%
% Carga el predicado "trace". As\'i
%    ?- trace.
%    Yes
%
% A continuaci\'on puedes realizar preguntas sobre el programa "menu". Ver\'as
% c\'omo Prolog indica que objetivo est\'a intentando demostrar en cada paso.
% Para poder seguirlo mejor debes dibujar a mano el \'arbol de deducci\'on de 
% la pregunta e ir siguiendo sobre el \'arbol cada uno de los pasos que da
% Prolog. Empieza con preguntas sencillas como "? -entrada(X)." o
% "?- plato_principal(X)", hasta llegar a "?- comida_equilibrada(X,Y,Z)".
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

