% PD 2007-08: Examen 2 (Grupos 2A y 2B) (14 de enero de 2008)
% ====================================================================== 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ejercicio 1: Definir la relación elimina_vocales(+P1,-P2) que se
% verifica si P2 es el resultado de eliminar las vocales del átomo
% P1. Por ejemplo,
%    ?- elimina_vocales(salamanca,P).
%    P = slmnc
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

elimina_vocales(P1,P2) :-
   name(P1,L1),name(aeiou,V),
   findall(X,(member(X,L1), \+ member(X,V)),L2),
   name(P2,L2).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ejercicio 3:  Una expresión aritmética puede ser:
%    * Un número natural: 0,1,2,3,...
%    * Una variable: a,b,c,d,...
%    * Un operador binario sobre números enteros (+,-,*,...) aplicado a
%    dos subexpresiones aritméticas. 
% Una asignación es una aplicación que asocia a una lista de variables
% sus correspondientes valores. La representaremos mediante una lista de
% la forma Variable-Valor. Por ejemplo, [a-3,b-1,c-7]  
% 
% Definir la relación valor(+E,+A,-V) que recibe una expresión
% aritmética E y una asignación A y devuelve el número V obtenido al
% evaluar la expresión E sustituyendo cada variable por su valor según
% la asignación A. Por ejemplo, 
%    ?- valor(a+b-7*c,[a-1,b-7,c-2],V).
%    V = -6
%    ?- valor(b+(b+9*c),[a-6,b-1,c-1,d-7],V).
%    V = 11
%    ?- valor(a+b,[a-7,c-1],V).
%    No
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

valor(E,_,E) :-
   number(E),!.
valor(E,A,V) :-
   atom(E),!,
   member(E-V,A).
valor(E,A,V) :-
   E =.. [O,E1,E2],
   valor(E1,A,V1),
   valor(E2,A,V2),
   P =.. [O,V1,V2],
   V is P.
