% Examen de "Programación Declarativa" (27 de Septiembre de 2001) % Apellidos: % Nombre: %============================================================================== %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Ejercicio 1: Definir la relación factrev(X,N) que reciba como dato de entrada % el número entero positivo X y devuelva el número N si el factorial de N es X % y devuelva "No" si X no corresponde con el factorial de ningún número. Por % ejemplo, % ?- factrev(120,N). % N = 5 ; % No % ?- factrev(80,N). % No %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Ejercicio 2: Definir la relación sumas_posibles(S,Listas) que reciba como % dato de entrada un entero positivo y Listas sea la lista ordenada y sin % repetición de todas las listas L que verifiquen: % (1) Los elementos de L son enteros positivos % (2) Los elementos de L suman S % (3) Los elementos de L están ordenados (Ayuda: Usa msort) % Por ejemplo % ?- sumas_posibles(4,L). % L = [[1, 1, 1, 1], [1, 1, 2], [1, 3], [2, 2], [4]] ; % No %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Ejercicio 3: Definir la relación evalua(+Expr,+Lista_valores,?Resultado) que % tome como dato de entrada la expresión aritmética Expr, formada por % constantes y operadores aritméticos y una lista Lista_valores de la forma % [valor(c1,v1), valor(c2,v2), ... , valor(cn,vn)] que asigna a cada constante % ci el valor numérico vi y devuelve el Resultado obtenido tras evaluar la % expesión aritmética una vez sustituidas las constantes por su valor. Por % ejemplo, % ?- evalua(a+b-c^a,[valor(a,2),valor(b,5),valor(c,3)],Valor). % Valor = -2 % ?- evalua_2(a*b/c,[valor(a,2),valor(b,5),valor(c,4)],Valor). % Valor = 2.5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%