Ejercicios Prolog

3
Programaci´ondeclarativa Ejercicios 1. Implementar un predicado comp(Subconj, Conj, Comp) que se verifique sii Comp es el complementario del subconjunto Subconj en el conjunto Conj. Ejemplo: comp([3,1], [1,3,2,6], X) debe darnos la respuesta X = [2, 6] o cualquier otra permutaci´ on de X. NOTA: Para simplificar la implementaci´on puede suponerse que los conjuntos est´ an representados por listas sin elementos repetidos, y que los argumentos del predicado est´ an ya en ese buen formato. 2. Implementar un predicado Prolog de sintaxis sustituir(Elem,PorElem,Lista, Resultado) tal que Resultado es la lista resultante de sustituir en la lista Lista todas las apariciones de Elem por PorElem. Ejemplo: La respuesta a la pregunta sustituir([a,b,c,a,[a],d],Resultado) ser´ ıa Resultado = [b,b,c,b,[a],d] 3. Implementar un predicado Prolog de sintaxis comprimir (Lista, Comprimida) tal que Comprimida es la lista resultado de comprimir la lista Lista, al eliminar repeticiones consecutivas de un elemento dado. Ejemplo: La respuesta a la pregunta comprimir([a,a,a,a,b,c,c,a,a,d,e,e,e,e],X) ser´ ıa X= [a,b,c,a,d,e] 4. Implementar un predicado Prolog de sintaxis duplicar n(Lista,N,Resultado) tal que Resultado es la lista obtenida a partir de la lista Lista al repetir N veces cada elemento en la lista Lista. Ejemplo: La respuesta a la pregunta duplicar n([a,b,c],3,X) ser´ ıa X = [a,a,a,b,b,b,c,c,c]. 5. Implementar un predicado Prolog de sintaxis codificar(Lista, Resultado) tal que Resultado es la lista resultante de codificar la lista Lista de tal forma que una sucesi´on de elementos repetidos consecutivos en Lista se sustituye por un par de la forma [Longitud, Elemento] con Longitud la longitud de la serie de repeticiones consecutivas de Elemento. Ejemplo: La respuesta a una pregunta codificar([a,a,a,a,b,c,c,a,a,d,e,e,e,e],X) ser´ ıa X= [[4,a],[1,b],[2,c],[2,a],[1,d][4,e]]. NOTA: Pueden suponerse implementados los predicados longitud(Lista,L) que calcula la longitud L de la lista Lista; y el predicado empacar(Lista, R) donde R es el resultado de incluir en una sublista las secuencias de elementos repetidos en la lista Lista. As´ ı, la respuesta a la pregunta empacar([a,a,a,a,b,c,c,a,a,d,e,e,e,e],X) ser´ ıa X= [[a,a,a,a],[b],[c,c],[a,a],[d],[e,e,e,e]] NOTA: Tambi´ en puede hacerse directamente, sin los predicados mencionados. 6. Implementar un predicado Prolog de sintaxis extraer n(Lista,Pos1,Pos2,Resultado) tal que Resultado es la lista resultante de extraer de la lista Lista la sublista formada por los elementos situados entre las posiciones Pos1 y Pos2. Ejemplo: La respuesta a la pregunta extraer n([a,b,c,d,e,f,g,h,i,k],3,7,L) es L = [c,d,e,f,g]. 7. Implementar un predicado Prolog de sintaxis combinaciones(N,Lista,Combinaci´ on) tal que Combinaci´ on es una de las posibles combinaciones de N elementos de la lista Lista. Ejemplo: La respuestas a la pregunta combinaciones(3,[a,b,c,d,e,f],R) son [a,b,c], [a,b,d], [a,b,e], ... 8. Implementar un predicado Prolog de sintaxis empacar(Lista,Resultado) tal que Resultado es la lista resultante de incluir en una misma sublista a elementos repetidos consecutivos de la lista Lista. Ejemplo: La respuesta a la pregunta empacar([a,a,a,a,b,c,c,a,a,d,e,e,e,e],X) ser´ ıa X= [[a,a,a,a],[b],[c,c],[a,a],[d],[e,e,e,e]] 9. Implementar un predicado Prolog de sintaxis duplicar(Lista, Resultado) tal que Resultado es la lista resultante de duplicar en la lista Lista cada uno de sus elementos. Ejemplo: La respuesta a la pregunta duplicar([a,b,c,c,d],X). es X = [a,a,b,b,c,c,c,c,d,d]. 1

Transcript of Ejercicios Prolog

Page 1: Ejercicios Prolog

Programacion declarativa

Ejercicios

1. Implementar un predicado comp(Subconj, Conj, Comp) que se verifique sii Comp es el complementario

del subconjunto Subconj en el conjunto Conj.

Ejemplo: comp([3,1], [1,3,2,6], X) debe darnos la respuesta X = [2, 6] o cualquier otra

permutacion de X.

NOTA: Para simplificar la implementacion puede suponerse que los conjuntos estan representados por

listas sin elementos repetidos, y que los argumentos del predicado estan ya en ese buen formato.

2. Implementar un predicado Prolog de sintaxis sustituir(Elem,PorElem,Lista, Resultado) tal que

Resultado es la lista resultante de sustituir en la lista Lista todas las apariciones de Elem por PorElem.

Ejemplo: La respuesta a la pregunta sustituir([a,b,c,a,[a],d],Resultado) serıa Resultado =

[b,b,c,b,[a],d]

3. Implementar un predicado Prolog de sintaxis comprimir (Lista, Comprimida) tal que Comprimida es

la lista resultado de comprimir la lista Lista, al eliminar repeticiones consecutivas de un elemento dado.

Ejemplo: La respuesta a la pregunta comprimir([a,a,a,a,b,c,c,a,a,d,e,e,e,e],X) serıa X =

[a,b,c,a,d,e]

4. Implementar un predicado Prolog de sintaxis duplicar n(Lista,N,Resultado) tal que Resultado es

la lista obtenida a partir de la lista Lista al repetir N veces cada elemento en la lista Lista.

Ejemplo: La respuesta a la pregunta duplicar n([a,b,c],3,X) serıa X = [a,a,a,b,b,b,c,c,c].

5. Implementar un predicado Prolog de sintaxis codificar(Lista, Resultado) tal que Resultado es la

lista resultante de codificar la lista Lista de tal forma que una sucesion de elementos repetidos consecutivos

en Lista se sustituye por un par de la forma [Longitud, Elemento] con Longitud la longitud de la serie

de repeticiones consecutivas de Elemento.

Ejemplo: La respuesta a una pregunta codificar([a,a,a,a,b,c,c,a,a,d,e,e,e,e],X) serıa X =

[[4,a],[1,b],[2,c],[2,a],[1,d][4,e]].

NOTA: Pueden suponerse implementados los predicados longitud(Lista,L) que calcula la longitud L de

la lista Lista; y el predicado empacar(Lista, R) donde R es el resultado de incluir en una sublista las

secuencias de elementos repetidos en la lista Lista.

Ası, la respuesta a la pregunta empacar([a,a,a,a,b,c,c,a,a,d,e,e,e,e],X) serıa X =

[[a,a,a,a],[b],[c,c],[a,a],[d],[e,e,e,e]]

NOTA: Tambien puede hacerse directamente, sin los predicados mencionados.

6. Implementar un predicado Prolog de sintaxis extraer n(Lista,Pos1,Pos2,Resultado) tal que

Resultado es la lista resultante de extraer de la lista Lista la sublista formada por los elementos situados

entre las posiciones Pos1 y Pos2.

Ejemplo: La respuesta a la pregunta extraer n([a,b,c,d,e,f,g,h,i,k],3,7,L) es L = [c,d,e,f,g].

7. Implementar un predicado Prolog de sintaxis combinaciones(N,Lista,Combinacion) tal que

Combinacion es una de las posibles combinaciones de N elementos de la lista Lista.

Ejemplo: La respuestas a la pregunta combinaciones(3,[a,b,c,d,e,f],R) son [a,b,c], [a,b,d],

[a,b,e], ...

8. Implementar un predicado Prolog de sintaxis empacar(Lista,Resultado) tal que Resultado es la lista

resultante de incluir en una misma sublista a elementos repetidos consecutivos de la lista Lista.

Ejemplo: La respuesta a la pregunta empacar([a,a,a,a,b,c,c,a,a,d,e,e,e,e],X) serıa X =

[[a,a,a,a],[b],[c,c],[a,a],[d],[e,e,e,e]]

9. Implementar un predicado Prolog de sintaxis duplicar(Lista, Resultado) tal que Resultado es la

lista resultante de duplicar en la lista Lista cada uno de sus elementos.

Ejemplo: La respuesta a la pregunta duplicar([a,b,c,c,d],X). es X = [a,a,b,b,c,c,c,c,d,d].

1

Page 2: Ejercicios Prolog

10. Implementar un predicado Prolog de sintaxis duplicar n(Lista,N,Resultado) tal que Resultado es

la lista obtenida a partir de la lista Lista al repetir N veces cada elemento en la lista Lista.

Ejemplo: La respuesta a la pregunta duplicar n([a,b,c],3,X) serıa X = [a,a,a,b,b,b,c,c,c].

11. Implementar un predicado Prolog de sintaxis eliminar(Lista,Posicion,Resultado) tal que

Resultado es la lista obtenida a partir de la original Lista, una vez eliminado el elemento en la posicion

Posicion.

Ejemplo: La respuesta a la pregunta eliminar([a,b,c,d,e,f,g,h,i,k],3,X). es X =

[a,b,d,e,g,h,k].

12. Implementar un predicado Prolog de sintaxis separar(Lista,Longitud,Sublista1,Sublista2) tal

que Sublista1 y Sublista2 son las sublistas resultantes de dividir la lista Lista en dos partes

consecutivas, de manera que la primera posee longitud Longitud.

Ejemplo: La respuesta a la pregunta separar([a,b,c,d,e,f,g,h,i,k],3,L1,L2) serıa L1 = [a,b,c],

L2 = [d,e,f,g,h,i,k].

13. Implementar un predicado Prolog de sintaxis rotar(Lista,N,Resultado) tal que Resultado es la lista

resultante de rotar N posiciones hacia la izquierda los elementos de la lista Lista.

Ejemplo: La respuesta a la pregunta rotar([a,b,c,d,e,f,g,h],3,X) serıa X = [d,e,f,g,h,a,b,c].

NOTA: Pueden suponerse implementados los

predicados longitud(Lista,Longitud,Sublista1,Sublista2) tal que Sublista1 y Sublista2 son las

sublistas resultantes de dividir la lista Lista en dos partes consecutivas, de manera que la primera posee

longitud Longitud.Ası, la respuesta a la pregunta separar([a,b,c,d,e,f,g,h,i,k],3,L1,L2) serıa L1

= [a,b,c], L2 = [d,e,f,g,h,i,k].

14. Implementar un predicado Prolog de sintaxis eliminar(Posicin,Lista,Elemento,Resultado) tal que

la lista Resultado es el resultado de eliminar el elemento Elemento en la posicion Posicion de la lista

Lista. Se supone que el primer elemento se encuentra en la posicion 1.

Ejemplo: La respuesta a la pregunta eliminar(2,[a,b,c,d],X,R) es X=b y R=[a,c,d].

15. Implementar un predicado Prolog de sintaxis insertar(Elemento,Posicion,Lista,Resultado) tal

que Resultado es la lista resultante de insertar en la posicion Posicion de la lista Lista el elemento

Elemento. Se supone que el primer elemento se encuentra en la posicion 1.

Ejemplo: La respuesta a la pregunta insertar(pepe,2,[a,b,c,d],R) es R = [a,pepe,b,c,d].

16. Implementar un predicado Prolog de sintaxis rango(Primero,Ultimo,Resultado) tal que Resultado

es la lista formada por los enteros en el rango del intervalo [Primero,Ultimo].

Ejemplo: La respuesta a la pregunta rango(4,9,R) es R=[4,5,6,7,8,9].

17. Implementar un predicado Prolog de sintaxis extraer random(Lista,Nmero,Resultado) tal que

Resultado es la lista resultante de eliminar en la lista Lista un numero Numero de elementos seleccionados

de manera aleatoria.

Ejemplo: La respuesta a la pregunta extraer random([a,b,c,d,e,f,g,h],3,R) es R=[e,d,a].

NOTA: Pueden suponerse concocidos los siguientes predicados:

• El generador de nmeros aleatorios random(N), que genera un numero entero aleatorio en el intervalo

[0,N-1].

• El predicado eliminar(Posicin,Lista,Elemento,Resultado) tal que la lista Resultado es el

resultado de eliminar el elemento Elemento en la posicion Posicion de la lista Lista, suponiendo

que el primer elemento se encuentra en la posicion 1.

• El predicado longitud(Lista,L) tal que L es la longitud de la lista Lista.

18. Implementar un predicado Prolog de sintaxis combinaciones(N,Lista,Combinacion) tal que

Combinacion es una de las posibles combinaciones de N elementos de la lista Lista.

Ejemplo: La respuestas a la pregunta combinaciones(3,[a,b,c,d,e,f],R) son [a,b,c], [a,b,d],

[a,b,e], ...

2

Page 3: Ejercicios Prolog

19. Implementar un predicado Prolog de sintaxis binarios bl(N,Arbol) tal que Arbol es un arbol binario

balanceado, con N nodos. Utilizar el caracter x como informacion asociada a cada nodo del arbol

asıgenerado, siendo el funtor de cada nodo binario.

NOTA: Decimos que un arbol binario esta balanceado cuando el numero de hijos de su rama derecha es

identico al numero de hijos de su rama izquierda salvo, quizas, una diferencia de uno.

Ejemplo: La respuestas a la pregunta binarios bl(4,Arbol) son Arbol=binatio(x, binario(x, nil,

nil), binario(x, nil, binario(x, nil, nil))), Arbol=binario(x, binario(x, nil, nil),

binario(x, binario(x, nil, nil), nil)), ...

20. Implementar un predicado Prolog de sintaxis binarios sim(Arbol) tal que la respuesta sea true si y

solo si Arbol es un arbol binario simetrico, esto es, si la rama derecha del nodo raız posee una estructura

especular del de la izquierda, independientemente del contenido de sus nodos.

3