Programación Exploratoria Año 2015 Práctico Nro. 2

Anuncio
Programación Exploratoria
Año 2015
Práctico Nro. 2 - Listas
1) Definir la relación longitud(L, G) de manera que se relacione a una lista L con su
longitud G.
2) Definir la relación producto(L, P) de manera que se relacione a una lista L con el
valor P que resulta de multiplicar a los elementos de la lista L.
3) Construir el árbol de resolución para cada una de las siguientes consultas. Además,
construir los árboles de resolución correspondientes a las reevaluaciones de cada
consulta.
a) longitud(L,4).
b) append(X,Y,[1,2,3,4]).
4) Explicar y comparar el significado de los programas que se presentan debajo. Para
llevar esto a cabo, es importante tener en cuenta a todas las reevaluaciones de cada
programa.
a) delete(X, [X|Xs], Xs).
delete(X, [Y|Ys], [Y|Zs]):- delete(X,Ys,Zs).
b) delete(X, [X|Xs], Xs).
delete(X, [Y|Ys], [Y|Zs]):- X \= Y, delete(X,Ys,Zs).
c) delete([], X, []).
delete([X|Xs],X,Ys):-delete(Xs, X, Ys).
delete([X|Xs], Z, [X|Ys]):- X \= Z, delete(Xs, Z, Ys).
d) delete([], X, []).
delete([X|Xs],X,Ys):-delete(Xs, X, Ys).
delete([X|Xs], Z, [X|Ys]):- delete(Xs, Z, Ys).
5) Definir la relación mitades(L, M1, M2) de manera que se relacione a una lista L con
sus dos mitades M1 y M2.
Ejemplos: mitades([1,2,3,4],[1,2],[3,4]).
mitades([1,2,3,4,5],[1,2],[3,4,5]).
a) Definir la relación considerando la longitud de las listas M1 y M2.
b) Definir la relación sin considerar la longitud de las listas M1 y M2.
6) Definir la relación diferencia(A, B, C) de manera que se relacione a dos listas
numéricas A y B con una tercera lista numérica C que tiene la siguiente propiedad.
Cada elemento de C es el resultado de realizar la diferencia entre el elemento de A
que ocupa su posición y el elemento de B que ocupa su posición.
Ejemplo: diferencia([4, 3, 2],[2, 2, 4], [2, 1, -2]).
7) Definir el predicado atomos(L, A) de manera que se relacione a una lista L con la
cantidad A de átomos que existen en la lista L. Se debe tener en cuenta que la lista L
es una lista multinivel. En una lista multinivel, cada elemento puede ser un átomo o
una lista multinivel.
?- atomos([[a,b,c,[d,e,[f],g,[h,i]]],[j,k,[l]],m,n],A).
A = 14
8) Definir el predicado rotada(N, L, X) de manera que se relacione a una lista L con la
lista X que resulta de aplicar N rotaciones a izquierda sobre L.
?- rotada(4,[a,b,c,d,e,f,g,h,i,j],X).
X = [e,f,g,h,i,j,a,b,c,d]
9) Definir el predicado podada(L, N, X) de manera que se relacione a una lista L con la
lista X que resulta de podar o eliminar los primeros N elementos de L.
?- podada([a,b,c,d,e,f],4,X).
X = [e,f]
10) Definir el predicado ubicado(L, P, E) de manera que se relacione a una lista L con el
elemento E que se encuentra ubicado en la posición P de dicha lista.
?- ubicado([g,h,m,j,k,l],4,E).
E=j
11) Definir el predicado sustituido(L, P, V, X) de manera que se relacione a una lista L
con la lista X que resulta de sustituir al elemento que se encuentra en la posición P
de L por el elemento V.
?- sustituido([g,h,m,j,k,l],4,a,X).
X = [g,h,m,a,k,l]
12) Definir un predicado para cada una de las siguientes operaciones de conjuntos.
−
−
−
−
Unión
Intersección
Diferencia
Disyunción (predicado que sea verdadero cuando sus argumentos sean dos
conjuntos disjuntos)
− Inclusión (predicado que sea verdadero cuando el primer conjunto esté incluido en
el segundo conjunto)
13) Definir el predicado sin_duplicados(L1, L2) de manera que se relacione a una lista
L1 con la lista L2 que resulta de eliminar todos los duplicados de la lista L1.
?- sin_duplicados([4,2,3,4], L2)
L2 = [4,2,3]
14) Definir el predicado subsecuencia(L,S) de manera que se relacione a una lista L con
una subsecuencia S de la lista L. Se considera que S es una subsecuencia de la lista L
si cumple la siguiente condición. S es una lista de elementos que ocurren en ese
orden (aunque no necesariamente de manera consecutiva) en la lista L.
El predicado subsecuencia(L,S) debería ser definido de manera tal que, mediante
sucesivas reevaluaciones, sea posible conocer a todas las subsecuencias de L. Se
debe tener en cuenta que la lista vacía es considerada como una subsecuencia de L.
Ejemplos:
?- subsecuencia([a,b,c,d],[c,d]).
Yes
?- subsecuencia([a,b,c,d,g,h,i],[b,d,i]).
Yes
?- subsecuencia([a,b,c,d],[c,a]).
No
?- subsecuencia([a,b,c],S).
S = [a,b,c] ;
S = [a,b] ;
S = [a,c] ;
S = [a] ;
S = [b,c] ;
S = [b] ;
S = [c] ;
S = [] ;
No
15) Definir el predicado transpuesta(M,T) de manera que se relacione a una matriz M
con su matriz transpuesta T. Considere que la matriz M es representada mediante
una lista de listas, y que la matriz T también debería ser representada mediante una
lista de listas.
?- transpuesta([[3,2,6],[2,1,4]],T).
T = [[3,2],[2,1],[6,4]]
Descargar