Taller1 FLP
Taller1 FLP
Taller1 FLP
Diciembre de 2020
1. (2pts.)(list-set lista n x) que retorna una lista similar a lista, excepto que el n-simo elemento
(indexado desde cero) es x.
2. (2pts.)(list-tails lista) que recibe como parámetro una lista y retorna una lista de todas las sublistas
de elementos consecutivos en lista.
3. (4pts.)(exists? pred lst) recibe como parametros un predicado (number? symbol? bool? list?) y re-
torna #t si al menos un elemento de la lista satisface el predicado
4. (3pts.)(list-facts n) que recibe como parámetro un entero n y retorna una lista incremental de facto-
riales, comenzando en 1! hasta n!
> (list-facts 5)
(1 2 6 24 120)
5. (4pts.)(simpson-rule f a b n) que cálcula la integral de una función f entre los valores a y b mediante
la regla de Simpson. Dicha regla utiliza la siguiente aproximación:
h
· y0 + 4y1 + 2y2 + 4y3 + 2y4 + · · · + 2yn−2 + 4yn−1 + yn
3
(b−a)
donde h = n para algún entero par n y yk = f (a + kh).
1
> (simpson-rule (lambda (x) (* x (* x x))) 1 5 8)
156
> (simpson-rule (lambda (x) x) 1 5 12)
12
6. (4pts.)(inversions lista) que determina el número de inversiones de lista. Sea A = (a1 a2 . . . an ) una
lista de n números diferentes, si i < j y ai > aj entonces la pareja (i j) es una inversión de A.
7. (4pts.)(up lista) que remueve un par de paréntesis de cada elemento del nivel más alto de lista. Si
un elemento de este nivel no es una lista (no tiene paréntesis), este elemento es incluido en el resultado
sin modificaciones.
8. (4pts.)(merge lista1 lista2), donde lista1 y lista2 son listas de enteros ordenadas ascendentemen-
te. El procedimiento merge retorna una lista ordenada de todos los elementos en lista1 y lista2.
9. (4pts.)(zip f lista1 lista2) que retorna una lista donde la posición n-sima corresponde al resultado
de aplicar la función f sobre los elementos en la posición n-sima en lista1 y lista2. Puede asumir que
f es una función que recibe dos argumentos y que ambas listan tienen igual tamaño.
10. (2pts.)(max-list lista) que recibe una lista de números y devuelve el número mayor en dicha lista.
11. (4pts.)(foldl lista f acum) que recibe una lista lista, una función f y un valor inicial acum. La
función f es una función que recibe dos parámetros. Este procedimiento aplicará la función f a cada
elemento de la lista y a un valor acumulado inicialmente correspondiente al valor inicial acum.
2
12. (4pts.)(filter-acum a b f acum filter) que recibe dos números a y b, una función binaria f, un valor
inicial acum y una función unaria filter. Este procedimiento aplicará la función f a cada valor entre a y
b y a un valor acumulado que inicialmente corresponde al valor inicial acum.
13. (4pts.)(sort lista f) que retorna la lista lista ordenada ascendentemente aplicando la función de
comparación f.
14. (4pts.)(path num arbol) que toma un entero num y un árbol binario de búsqueda que contiene el entero
num y retorna una lista de lefts y rights indicando como encontrar el nodo que contiene el entero num
en el árbol. Si num es encontrado en la raı́z, el procedimiento retorna una lista vacia.
15. (5pts.)(prod-scalar-matrix mat vec) que recibe una matriz mat representada como una lista de listas
y un vector vec representado como una lista y retorna el resultado de realizar la multiplicación matriz
por vector.
Nota: Puede asumir que los tamaños de la matriz y el vector son coherentes.
16. (4pts.)(get-elements-in-order arbol) que toma un árbol binario de búsqueda arbol y retorna una
lista con sus elementos ordenados ascendentemente.
17. (5pts.)(common-subtree arbol1 arbol2) que recibe dos arboles n-arios y retorna el subarbol común
(estructuralmente). El subarbol común se compone de las ramas que existen en ambos árboles. En este
ejercicio el dato existente en cada nodo es irrelevante por lo que puede asumir que siempre será 0.
A continuación se muestra un ejemplo del subarbol común para dos árboles binarios:
3
18. (5pts.)(pascal N) que retorna la fila N del triangulo de Pascal.
A continuación se muestra las primeras cinco filas del triangulo de Pascal:
1 Primera fila
1 1 Segunda fila
1 2 1 Tercera fila
Ayuda: Note que la fila N depende de la anterior, por ejemplo la quinta fila:
(1 4 6 4 1) =
(0 1 3 3 1) +
(1 3 3 1 0)
> (pascal 5)
(1 4 6 4 1)
> (pascal 1)
(1)
19. (6pts.)(remove-bin-stree arbol val) que toma un árbol binario de búsqueda arbol y retorna un
nuevo árbol binario de búsqueda donde se ha removido el elemento val.