I1M2012: Ejercicios de definiciones por recursión (2)
En la clase de hoy de Informática de 1º del Grado en Matemáticas hemos comentado las soluciones a los 6 últimos ejercicios de la 7ª relación, que tratan sobre definiciones por recursión.
Los ejercicios, y sus soluciones, se muestran a continuación:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
-- --------------------------------------------------------------------- -- Ejercicio 8. Definir por recursión la función -- elem' :: Eq a => a -> [a] -> Bool -- tal que (elem' x xs) se verifica si x pertenece a la lista xs. Por -- ejemplo, -- elem' 3 [2,3,5] == True -- elem' 4 [2,3,5] == False -- --------------------------------------------------------------------- elem' :: Eq a => a -> [a] -> Bool elem' x [] = False elem' x (y:ys) | x == y = True | otherwise = elem' x ys -- --------------------------------------------------------------------- -- Ejercicio 9. Definir por recursión la función -- last' :: [a] -> a -- tal que (last xs) es el último elemento de xs. Por ejemplo, -- last' [2,3,5] => 5 -- --------------------------------------------------------------------- last' :: [a] -> a last' [x] = x last' (_:xs) = last' xs -- --------------------------------------------------------------------- -- Ejercicio 10. Definir por recursión la función -- concat' :: [[a]] -> [a] -- tal que (concat' xss) es la lista obtenida concatenando las listas de -- xss. Por ejemplo, -- concat' [[1..3],[5..7],[8..10]] == [1,2,3,5,6,7,8,9,10] -- --------------------------------------------------------------------- concat' :: [[a]] -> [a] concat' [] = [] concat' (xs:xss) = xs ++ concat' xss -- --------------------------------------------------------------------- -- Ejercicio 11. Definir por recursión la función -- selecciona :: [a] -> Int -> a -- tal que (selecciona xs n) es el n-ésimo elemento de xs. Por ejemplo, -- selecciona [2,3,5,7] 2 == 5 -- --------------------------------------------------------------------- selecciona :: [a] -> Int -> a selecciona (x:_) 0 = x selecciona (_:xs) n = selecciona xs (n-1) -- --------------------------------------------------------------------- -- Ejercicio 12. Definir por recursión la función -- take' :: Int -> [a] -> [a] -- tal que (take' n xs) es la lista de los n primeros elementos de -- xs. Por ejemplo, -- take' 3 [4..12] => [4,5,6] -- --------------------------------------------------------------------- take' :: Int -> [a] -> [a] take' 0 _ = [] take' n [] = [] take' n (x:xs) = x : take' (n-1) xs -- --------------------------------------------------------------------- -- Ejercicio 13. Definir la función -- refinada :: [Float] -> [Float] -- tal que (refinada xs) es la lista obtenida intercalando entre cada -- dos elementos consecutivos de xs su media aritmética. Por ejemplo, -- refinada [2,7,1,8] == [2.0,4.5,7.0,4.0,1.0,4.5,8.0] -- refinada [2] == [2.0] -- refinada [] == [] -- --------------------------------------------------------------------- refinada :: [Float] -> [Float] refinada (x:y:zs) = x : (x+y)/2 : refinada (y:zs) refinada xs = xs |