I1M2015: Definiciones por recursión (1)
En la segunda parte de la clase de hoy de Informática de 1º del Grado en Matemáticas se ha empezado el estudio de las definiciones por recursión en Haskell. Concretamente, hemos visto ejemplos de
- recursión sobre los números naturales y
- recursión sobre listas,
El código correspondiente es
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 |
-- --------------------------------------------------------------------- -- Recursión numérica -- -- --------------------------------------------------------------------- -- (factorial n) es el factorial de n. Por ejemplo, -- factorial 3 == 6 factorial :: Integer -> Integer factorial 0 = 1 factorial (n+1) = (n+1) * factorial n -- (m `por` n) es el producto de m por n. Por ejemplo, -- 3 `por` 2 == 6 por :: Int -> Int -> Int m `por` 0 = 0 m `por` (n + 1) = m + (m `por` n) -- --------------------------------------------------------------------- -- Recusión sobre lista -- -- --------------------------------------------------------------------- -- (producto xs) es el producto de los números de xs. Por ejemplo, -- producto [7,5,2] == 70 producto :: Num a => [a] -> a producto [] = 1 producto (n:ns) = n * producto ns -- (longitud xs) es el número de elementos de xs. Por ejemplo, -- longitud [2,4,5] == 3 longitud :: [a] -> Int longitud [] = 0 longitud (_:xs) = 1 + longitud xs -- (inversa xs) es la inversa de xs. Por ejemplo, -- inversa [2,5,3] == [3,5,2] inversa :: [a] -> [a] inversa [] = [] inversa (x:xs) = inversa xs ++ [x] |
Las transparencias usadas en la clase son las primeras 9 páginas del tema 6