364 views
# PLP | Practica 0 ejercicio 4 ```haskell -- Ejercicio 4: Definir las siguientes funciones SOBRE LISTAS -- a) limpiar, que elimina todas las apariciones de cualquier caracter de la primera cadena en la segunda. -- Por ejemplo: ''susto'' ''puerta'' evalua a ''pera'' -- Nota: string es un renombre de [Char]. La notación ''hola'' es equivalenta a ['h','o','l','a'] y a 'h':'o':'l':'a':[] limpiar :: String -> String -> String limpiar [] ys = ys -- Caso base: si la primera cadena está vacía, devuelvo la segunda cadena limpiar (x:xs) ys = limpiar xs (eliminar x ys) -- Caso recursivo: elimino el primer caracter de la segunda cadena y sigo con el resto eliminar :: Char -> String -> String -- Funcionar auxiliar para eliminar un char eliminar _ [] = [] -- Caso base: si la cadena está vacía, devuelvo la cadena vacía eliminar x (y:ys) | x == y = eliminar x ys | otherwise = y : eliminar x ys -- b) difPromedio, que dada una lista de numeros devuelve la diferencia de cada uno con el promedio general. -- Ejemplo: difPromedio [2,4,3] evalua a [-1,1,0] -- Para hacer esto primero se debe calcular el promedio de la lista de numeros y luego restar a cada numero el promedio obtenido. difPromedio :: [Float] -> [Float] difPromedio xs = map (\x -> x - promedio xs) xs promedio :: [Float] -> Float promedio xs = sumaLista xs / fromIntegral (length xs) sumaLista :: [Float] -> Float sumaLista [] = 0 sumaLista (x:xs) = x + sumaLista xs -- c) todos iguales que indica si una lista de enteros tiene todos sus elemtnso iguales todosIguales :: [Int] -> Bool todosIguales [] = True todosIguales [x] = True todosIguales (x:y:xs) | x == y = todosIguales (y:xs) | otherwise = False ```