Sistemas Inteligentes (2016) Ingeniería en Informática

Anuncio
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)
Descargar