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]]