Sistemas Inteligentes (2016) Ingeniería en Informática - UNSL Práctico de Repaso: Lenguaje Prolog Ejercicio 1. Dada la siguiente denición en Prolog: member(X,[X|_]). member(X,[_|Y]):-member(X,Y). Determinar el resultado de las siguientes consultas: 1. 2. 3. 4. 5. 6. ?- member(t,[3,4,t,t1]). ?- member([tren],[2,t,r,e,n]). ?- member([1,2],[X]). ?- member([a,b],[a,23+3,[a,b],hola(mundo)]). ?- member([],[a,[],[2],4]). ?- member(X,[]). Ejercicio 2. En Prolog, un conjunto puede ser modelado mediante una lista de elementos sin repeticiones. Adoptando esta representación, implementar las siguientes operaciones sobre conjuntos: (Notar que luego del nombre del predicado, se especica la cantidad de argumentos que debe utilizar.) 1. conj_val/1: comprueba si la lista de términos que recibe como argumento constituye un conjunto válido. 2. pertenece/2: determina si el elemento que recibe como primer argumento pertenece a la lista pasada como segundo argumento. 3. add/3: incorpora el elemento que recibe como primer argumento, a la lista pasada como segundo argumento. Retorna el conjunto resultante como tercer argumento. 4. unir/3: une los dos conjuntos recibidos como primer y segundo argumento. Retorna el conjunto resultante como tercer argumento. 5. intersec/3: intersecta los dos conjuntos recibidos como primer y segundo argumento. Retorna el conjunto resultante como tercer argumento. 6. menos/3: calcula la diferencia entre los dos conjuntos recibidos como primer y segundo argumento. Retorna el conjunto resultante como tercer argumento. La función exp(A, B) retorna el número A elevado a la potencia B . Recursivamente se dene como: Ejercicio 3: ( exp(A, B) = 1 si B=0 A ∗ exp(A, B − 1) si B ≥ 1 Dena el predicado exp(A,B,C) que implemente dicha función. El primer argumento es la base A, el segundo argumento es el exponente B (valor entero) y C es el resultado de la exponenciación. Ejemplo: ?- exp(2,3,R). ?- exp(3,2,9). Ejercicio 4: R = 8 yes Suponga que un programa Prolog tiene denidos los siguientes hechos: personal(empleado(perez,fena(16,11,1964))). personal(empleado(lopez,fena(6,4,1982))). personal(empleado(gonzalez,fena(22,11,1973))). 1. Escriba el resultado (y el signicado) de las siguientes consultas: a) ?- personal(empleado(perez,X)). b) ?- personal(empleado(X,fena(12,_,_))). c) ?- personal(empleado(X,fena(_,_,Z))), Z < 1980. 2. Escriba una consulta que permita obtener los empleados nacidos en Noviembre. 3. Modique el functor empleado para que pueda contener el primer nombre, el segundo nombre y el apellido de la persona. Dena el predicado menor que dadas dos listas de enteros, devuelva la lista de menor o igual longitud. Ejemplo: Ejercicio 5: ?- menor([3,2],[4,5,6],[3,2]). ?- menor([2,1,9],[],X). yes X = [] Dena el predicado mayores, el cual toma como primer argumento una lista de estructuras per(N,A) donde N es el nombre de una persona y A el año de su nacimiento. Este predicado obtendrá en su segundo argumento, la estructura resu(P) donde P es el promedio de todas las edades de las personas del primer argumento. Ejemplo: Ejercicio 6: ?- mayores([per(pepe,1938), per(carlos,1988), per(tito,1940), per(coco,1995)],R). R = resu(50.75)