Ejercicios en Prolog - Ciencias Computacionales

Anuncio
Inteligencia Artificial
Maestrı́a y Doctorado en Ciencias Computacionales / INAOE
Dra. Angélica Muñoz Meléndez
Ejercicios de Programación Lógica
Objetivos
Habilitarse en la práctica de la programación lógica.
Ejercicios
(1) Escriba un programa en Prolog que reciba como primer argumento una
lista cuyos elementos pueden ser sublistas anidadas a distintas profundidades, y devuelva en un segundo argumento una lista aplanada, es decir
una lista cuyos elementos se han fundido en una lista de un solo nivel. Por
ejemplo si nuestro principal predicado se llama aplanar2 las siguientes son
respuestas correctas del programa.
?- aplanar([a,b,c],Y).
Y = [a, b, c] .
?- aplanar([a,[b,c],[d,e,[f,[g]]]],Y).
Y = [a, b, c, d, e, f, g] .
?- aplanar([[[[a],[b,c]],[d,[e]]],[f],[g]],Y).
Y = [a, b, c, d, e, f, g] .
(2) Escriba un programa en Prolog que intercambie dos elementos de una
lista dadas sus posiciones y devuelva el resultado en una nueva lista. El
programa recibe las posiciones de los elementos a intercambiar y la lista
original. Por ejemplo si el predicado principal se llama intercambia4 , las
siguientes son respuestas correctas del programa.
?- intercambia(1,5,[a,b,c,d,e,f,g,h],L).
L = [e, b, c, d, a, f, g, h] .
?-
intercambia(5,3,[1,2,3,4,5,6],L).
1
L = [1, 2, 5, 4, 3, 6] .
?- intercambia(5,5,[1,2,3,4,5,6],L).
L = [1, 2, 3, 4, 5, 6] .
?- intercambia(5,7,[1,2,3,4,5,6],L).
false.
?- intercambia(X,Y,[1,2,3,4,5,6],[1,2,5,4,3,6]).
X = 3,
Y = 5 .
(3) Escriba un programa en Prolog que recorra en profundidad un árbol ternario y que calcule la suma de cada rama desde la raı́z hasta una hoja.
Las sumas resultantes deben regresarse en una lista en el orden inverso
al seguido al recorrer el árbol. Por ejemplo para el árbol ilustrado en la
Figura 1, suponiendo que el principal predicado del programa se denomina
sumaprof 2 , la siguiente es la respuesta esperada del programa.
Figura 1: Árbol con nodos de tres hijos
?- sumaprof(a(3, a(5, a(7, nil, nil, nil), a(8, nil, nil,
nil), a(9, nil, nil, nil)), a(6, a(8, nil, nil, nil), a(9,
nil, nil, nil), nil), nil),Sumas).
Sumas = [3, 9, 18, 17, 17, 16, 15]
2
Descargar