SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Downloaden Sie, um offline zu lesen
Tema 6: Funciones recursivas
Informática (2010–11)
José A. Alonso Jiménez
Grupo de Lógica Computacional
Departamento de Ciencias de la Computación e I.A.
Universidad de Sevilla
IM Tema 6: Funciones recursivas
Tema 6: Funciones recursivas
1. Recursión numérica
2. Recusión sobre lista
3. Recursión sobre varios argumentos
4. Recursión múltiple
5. Recursión mutua
6. Heurísticas para las definiciones recursivas
2 / 30
IM Tema 6: Funciones recursivas
Recursión numérica
Tema 6: Funciones recursivas
1. Recursión numérica
2. Recusión sobre lista
3. Recursión sobre varios argumentos
4. Recursión múltiple
5. Recursión mutua
6. Heurísticas para las definiciones recursivas
3 / 30
IM Tema 6: Funciones recursivas
Recursión numérica
Recursión numérica: El factorial
La función factorial:
factorial :: Integer -> Integer
factorial 0 = 1
factorial (n + 1) = (n + 1) * factorial n
Cálculo:
factorial 3 = 3 * (factorial 2)
= 3 * (2 * (factorial 1))
= 3 * (2 * (1 * (factorial 0)))
= 3 * (2 * (1 * 1))
= 3 * (2 * 1)
= 3 * 2
= 6
4 / 30
IM Tema 6: Funciones recursivas
Recursión numérica
Recursión numérica: El producto
Definición recursiva del producto:
por :: Int -> Int -> Int
m `por` 0 = 0
m `por` (n + 1) = m + (m `por` n)
Cálculo:
3 `por` 2 = 3 + (3 `por` 1)
= 3 + (3 + (3 `por` 0))
= 3 + (3 + 0)
= 3 + 3
= 6
5 / 30
IM Tema 6: Funciones recursivas
Recusión sobre lista
Tema 6: Funciones recursivas
1. Recursión numérica
2. Recusión sobre lista
3. Recursión sobre varios argumentos
4. Recursión múltiple
5. Recursión mutua
6. Heurísticas para las definiciones recursivas
6 / 30
IM Tema 6: Funciones recursivas
Recusión sobre lista
Recursión sobre listas: La función product
Producto de una lista de números:
Prelude
product :: Num a => [a] -> a
product [] = 1
product (n:ns) = n * product ns
Cálculo:
product [7,5,2] = 7 * (product [5,2])
= 7 * (5 * (product [2]))
= 7 * (5 * (2 * (product [])))
= 7 * (5 * (2 * 1))
= 7 * (5 * 2)
= 7 * 10
= 70
7 / 30
IM Tema 6: Funciones recursivas
Recusión sobre lista
Recursión sobre listas: La función length
Longitud de una lista:
Prelude
length :: [a] -> Int
length [] = 0
length (_:xs) = 1 + length xs
Cálculo:
length [2,3,5] = 1 + (length [3,5])
= 1 + (1 + (length [5]))
= 1 + (1 + (1 + (length [])))
= 1 + (1 + (1 + 0))
= 1 + (1 + 1)
= 1 + 2
= 3
8 / 30
IM Tema 6: Funciones recursivas
Recusión sobre lista
Recursión sobre listas: La función reverse
Inversa de una lista:
Prelude
reverse :: [a] -> [a]
reverse [] = []
reverse (x:xs) = reverse xs ++ [x]
Cálculo:
reverse [2,5,3] = (reverse [5,3]) ++ [2]
= ((reverse [3]) ++ [5]) ++ [2]
= (((reverse []) ++ [3]) ++ [5]) ++ [2]
= (([] ++ [3]) ++ [5]) ++ [2]
= ([3] ++ [5]) ++ [2]
= [3,5] ++ [2]
= [3,5,2]
9 / 30
IM Tema 6: Funciones recursivas
Recusión sobre lista
Recursión sobre listas: ++
Concatenación de listas:
Prelude
(++) :: [a] -> [a] -> [a]
[] ++ ys = ys
(x:xs) ++ ys = x : (xs ++ ys)
Cálculo:
[1,3,5] ++ [2,4] = 1:([3,5] ++ [2,4])
= 1:(3:([5] ++ [2,4]))
= 1:(3:(5:([] ++ [2,4])))
= 1:(3:(5:[2,4]))
= 1:(3:[5,2,4])
= 1:[3,5,2,4]
= [1,3,5,2,4]
10 / 30
IM Tema 6: Funciones recursivas
Recusión sobre lista
Recursión sobre listas: Inserción ordenada
(inserta e xs) inserta el elemento e en la lista xs delante del
primer elemento de xs mayor o igual que e. Por ejemplo,
inserta 5 [2,4,7,3,6,8,10] [2,4,5,7,3,6,8,10]
inserta :: Ord a => a -> [a] -> [a]
inserta e [] = [e]
inserta e (x:xs) | e <= x = e : (x:xs)
| otherwise = x : inserta e xs
Cálculo:
inserta 4 [1,3,5,7] = 1:(inserta 4 [3,5,7])
= 1:(3:(inserta 4 [5,7]))
= 1:(3:(4:(5:[7])))
= 1:(3:(4:[5,7]))
= [1,3,4,5,7]
11 / 30
IM Tema 6: Funciones recursivas
Recusión sobre lista
Recursión sobre listas: Ordenación por inserción
(ordena_por_insercion xs) es la lista xs ordenada mediante
inserción, Por ejemplo,
ordena_por_insercion [2,4,3,6,3] [2,3,3,4,6]
ordena_por_insercion :: Ord a => [a] -> [a]
ordena_por_insercion [] = []
ordena_por_insercion (x:xs) =
inserta x (ordena_por_insercion xs)
Cálculo:
ordena_por_insercion [7,9,6] =
= inserta 7 (inserta 9 (inserta 6 []))
= inserta 7 (inserta 9 [6])
= inserta 7 [6,9]
= [6,7,9]
12 / 30
IM Tema 6: Funciones recursivas
Recursión sobre varios argumentos
Tema 6: Funciones recursivas
1. Recursión numérica
2. Recusión sobre lista
3. Recursión sobre varios argumentos
4. Recursión múltiple
5. Recursión mutua
6. Heurísticas para las definiciones recursivas
13 / 30
IM Tema 6: Funciones recursivas
Recursión sobre varios argumentos
Recursión sobre varios argumentos: La función zip
Emparejamiento de elementos (la función zip):
Prelude
zip :: [a] -> [b] -> [(a, b)]
zip [] _ = []
zip _ [] = []
zip (x:xs) (y:ys) = (x,y) : zip xs ys
Cálculo:
zip [1,3,5] [2,4,6,8]
= (1,2) : (zip [3,5] [4,6,8])
= (1,2) : ((3,4) : (zip [5] [6,8]))
= (1,2) : ((3,4) : ((5,6) : (zip [] [8])))
= (1,2) : ((3,4) : ((5,6) : []))
= [(1,2),(3,4),(5,6)]
14 / 30
IM Tema 6: Funciones recursivas
Recursión sobre varios argumentos
Recursión sobre varios argumentos: La función drop
Eliminación de elementos iniciales:
Prelude
drop :: Int -> [a] -> [a]
drop 0 xs = xs
drop (n+1) [] = []
drop (n+1) (x:xs) = drop n xs
Cálculo:
drop 2 [5,7,9,4] | drop 5 [1,4]
= drop 1 [7,9,4] | = drop 4 [4]
= drop 0 [9,4] | = drop 1 []
= [9,4] | = []
15 / 30
IM Tema 6: Funciones recursivas
Recursión múltiple
Tema 6: Funciones recursivas
1. Recursión numérica
2. Recusión sobre lista
3. Recursión sobre varios argumentos
4. Recursión múltiple
5. Recursión mutua
6. Heurísticas para las definiciones recursivas
16 / 30
IM Tema 6: Funciones recursivas
Recursión múltiple
Recursión múltiple: La función de Fibonacci
La sucesión de Fibonacci es: 0,1,1,2,3,5,8,13,21,. . . . Sus dos
primeros términos son 0 y 1 y los restantes se obtienen sumando
los dos anteriores.
(fibonacci n) es el n–ésimo término de la sucesión de
Fibonacci. Por ejemplo,
fibonacci 8 21
fibonacci :: Int -> Int
fibonacci 0 = 0
fibonacci 1 = 1
fibonacci (n+2) = fibonacci n + fibonacci (n+1)
17 / 30
IM Tema 6: Funciones recursivas
Recursión múltiple
Recursión múltiple: Ordenación rápida
Algoritmo de ordenación rápida:
ordena :: (Ord a) => [a] -> [a]
ordena [] = []
ordena (x:xs) =
(ordena menores) ++ [x] ++ (ordena mayores)
where menores = [a | a <- xs, a <= x]
mayores = [b | b <- xs, b > x]
18 / 30
IM Tema 6: Funciones recursivas
Recursión mutua
Tema 6: Funciones recursivas
1. Recursión numérica
2. Recusión sobre lista
3. Recursión sobre varios argumentos
4. Recursión múltiple
5. Recursión mutua
6. Heurísticas para las definiciones recursivas
19 / 30
IM Tema 6: Funciones recursivas
Recursión mutua
Recursión mutua: Par e impar
Par e impar por recursión mutua:
par :: Int -> Bool
par 0 = True
par (n+1) = impar n
impar :: Int -> Bool
impar 0 = False
impar (n+1) = par n
Cálculo:
impar 3 | par 3
= par 2 | = impar 2
= impar 1 | = par 1
= par 0 | = impar 0
= True | = False 20 / 30
IM Tema 6: Funciones recursivas
Recursión mutua
Recursión mutua: Posiciones pares e impares
(pares xs) son los elementos de xs que ocupan posiciones pares.
(impares xs) son los elementos de xs que ocupan posiciones
impares.
pares :: [a] -> [a]
pares [] = []
pares (x:xs) = x : impares xs
impares :: [a] -> [a]
impares [] = []
impares (_:xs) = pares xs
Cálculo:
pares [1,3,5,7]
= 1:(impares [3,5,7])
= 1:(pares [5,7])
= 1:(5:(impares [7]))
= 1:(5:[])
= [1,5]
21 / 30
IM Tema 6: Funciones recursivas
Heurísticas para las definiciones recursivas
Tema 6: Funciones recursivas
1. Recursión numérica
2. Recusión sobre lista
3. Recursión sobre varios argumentos
4. Recursión múltiple
5. Recursión mutua
6. Heurísticas para las definiciones recursivas
22 / 30
IM Tema 6: Funciones recursivas
Heurísticas para las definiciones recursivas
Aplicación del método: La función product
Paso 1: Definir el tipo:
product :: [Int] -> Int
Paso 2: Enumerar los casos:
product :: [Int] -> Int
product [] =
product (n:ns) =
Paso 3: Definir los casos simples:
product :: [Int] -> Int
product [] = 1
product (n:ns) =
23 / 30
IM Tema 6: Funciones recursivas
Heurísticas para las definiciones recursivas
Aplicación del método: La función product
Paso 4: Definir los otros casos:
product :: [Int] -> Int
product [] = 1
product (n:ns) = n * product ns
Paso 5: Generalizar y simplificar:
product :: Num a => [a] -> a
product = foldr (*) 1
donde (foldr op e l) pliega por la derecha la lista l
colocando el operador op entre sus elementos y el elemento e al
final. Por ejemplo,
foldr (+) 6 [2,3,5] 2+(3+(5+6)) 16
foldr (-) 6 [2,3,5] 2-(3-(5-6)) -2
24 / 30
IM Tema 6: Funciones recursivas
Heurísticas para las definiciones recursivas
Aplicación del método: La función drop
Paso 1: Definir el tipo:
drop :: Int -> [a] -> [a]
Paso 2: Enumerar los casos:
drop :: Int -> [a] -> [a]
drop 0 [] =
drop 0 (x:xs) =
drop (n+1) [] =
drop (n+1) (x:xs) =
25 / 30
IM Tema 6: Funciones recursivas
Heurísticas para las definiciones recursivas
Aplicación del método: La función drop
Paso 3: Definir los casos simples:
drop :: Int -> [a] -> [a]
drop 0 [] = []
drop 0 (x:xs) = x:xs
drop (n+1) [] = []
drop (n+1) (x:xs) =
Paso 4: Definir los otros casos:
drop :: Int -> [a] -> [a]
drop 0 [] = []
drop 0 (x:xs) = x:xs
drop (n+1) [] = []
drop (n+1) (x:xs) = drop n xs
26 / 30
IM Tema 6: Funciones recursivas
Heurísticas para las definiciones recursivas
Aplicación del método: La función drop
Paso 5: Generalizar y simplificar:
drop :: Integral b => b -> [a] -> [a]
drop 0 xs = xs
drop (n+1) [] = []
drop (n+1) (_:xs) = drop n xs
27 / 30
IM Tema 6: Funciones recursivas
Heurísticas para las definiciones recursivas
Aplicación del método: La función init
init elimina el último elemento de una lista no vacía.
Paso 1: Definir el tipo:
init :: [a] -> [a]
Paso 2: Enumerar los casos:
init :: [a] -> [a]
init (x:xs) =
Paso 3: Definir los casos simples:
init :: [a] -> [a]
init (x:xs) | null xs = []
| otherwise =
28 / 30
IM Tema 6: Funciones recursivas
Heurísticas para las definiciones recursivas
Aplicación del método: La función init
Paso 4: Definir los otros casos:
init :: [a] -> [a]
init (x:xs) | null xs = []
| otherwise = x : init xs
Paso 5: Generalizar y simplificar:
init :: [a] -> [a]
init [_] = []
init (x:xs) = x : init xs
29 / 30
IM Tema 6: Funciones recursivas
Bibliografía
Bibliografía
1. R. Bird. Introducción a la programación funcional con Haskell.
Prentice Hall, 2000.
Cap. 3: Números.
Cap. 4: Listas.
2. G. Hutton Programming in Haskell. Cambridge University Press,
2007.
Cap. 6: Recursive functions.
3. B. O’Sullivan, D. Stewart y J. Goerzen Real World Haskell.
O’Reilly, 2008.
Cap. 2: Types and Functions.
4. B.C. Ruiz, F. Gutiérrez, P. Guerrero y J.E. Gallardo. Razonando
con Haskell. Thompson, 2004.
Cap. 2: Introducción a Haskell.
Cap. 6: Programación con listas.
5. S. Thompson. Haskell: The Craft of Functional Programming,
Second Edition. Addison-Wesley, 1999.
Cap. 4: Designing and writing programs. 30 / 30

Weitere ähnliche Inhalte

Was ist angesagt?

Cuadro sinóptico estructuras de datos y su clasificación
Cuadro sinóptico   estructuras de datos y su clasificaciónCuadro sinóptico   estructuras de datos y su clasificación
Cuadro sinóptico estructuras de datos y su clasificaciónAlex Uhu Colli
 
Motores de bases de datos
Motores de bases de datosMotores de bases de datos
Motores de bases de datosstill01
 
Método de ordenamiento por selección (selection sort
Método de ordenamiento por selección (selection sortMétodo de ordenamiento por selección (selection sort
Método de ordenamiento por selección (selection sortlinkinpark03
 
Qué son las colas de prioridad
Qué son las colas de prioridadQué son las colas de prioridad
Qué son las colas de prioridadRodrigo Avendaño
 
Functional Patterns in Domain Modeling
Functional Patterns in Domain ModelingFunctional Patterns in Domain Modeling
Functional Patterns in Domain ModelingDebasish Ghosh
 
Comandos ddl y dml
Comandos ddl y dmlComandos ddl y dml
Comandos ddl y dmlGerardo
 
Data Structures in javaScript 2015
Data Structures in javaScript 2015Data Structures in javaScript 2015
Data Structures in javaScript 2015Nir Kaufman
 
Interfaz gráfica de usuario y eventos (introducción)
Interfaz gráfica de usuario y eventos (introducción)Interfaz gráfica de usuario y eventos (introducción)
Interfaz gráfica de usuario y eventos (introducción)Omar B.
 
Administración de Tablespace en PostgreSQL
Administración de Tablespace en PostgreSQLAdministración de Tablespace en PostgreSQL
Administración de Tablespace en PostgreSQLEddie Malca
 
5.3 dynamic programming
5.3 dynamic programming5.3 dynamic programming
5.3 dynamic programmingKrish_ver2
 
Diapositiva de prueba
Diapositiva de pruebaDiapositiva de prueba
Diapositiva de pruebaJPi2013
 

Was ist angesagt? (20)

Daa notes 2
Daa notes 2Daa notes 2
Daa notes 2
 
8.clases y objetos en c++
8.clases y objetos en c++8.clases y objetos en c++
8.clases y objetos en c++
 
Cuadro sinóptico estructuras de datos y su clasificación
Cuadro sinóptico   estructuras de datos y su clasificaciónCuadro sinóptico   estructuras de datos y su clasificación
Cuadro sinóptico estructuras de datos y su clasificación
 
Estructura de Datos
Estructura de DatosEstructura de Datos
Estructura de Datos
 
Motores de bases de datos
Motores de bases de datosMotores de bases de datos
Motores de bases de datos
 
8a Curso de POO en Java - crear proyecto eclipse
8a Curso de POO en Java - crear proyecto eclipse8a Curso de POO en Java - crear proyecto eclipse
8a Curso de POO en Java - crear proyecto eclipse
 
Método de ordenamiento por selección (selection sort
Método de ordenamiento por selección (selection sortMétodo de ordenamiento por selección (selection sort
Método de ordenamiento por selección (selection sort
 
Qué son las colas de prioridad
Qué son las colas de prioridadQué son las colas de prioridad
Qué son las colas de prioridad
 
Functional Patterns in Domain Modeling
Functional Patterns in Domain ModelingFunctional Patterns in Domain Modeling
Functional Patterns in Domain Modeling
 
Consultas base de datos en SQL
Consultas base de datos en SQLConsultas base de datos en SQL
Consultas base de datos en SQL
 
Comandos ddl y dml
Comandos ddl y dmlComandos ddl y dml
Comandos ddl y dml
 
Administracion de memoria
Administracion de memoriaAdministracion de memoria
Administracion de memoria
 
Data Structures in javaScript 2015
Data Structures in javaScript 2015Data Structures in javaScript 2015
Data Structures in javaScript 2015
 
Interfaz gráfica de usuario y eventos (introducción)
Interfaz gráfica de usuario y eventos (introducción)Interfaz gráfica de usuario y eventos (introducción)
Interfaz gráfica de usuario y eventos (introducción)
 
vim - Tips and_tricks
vim - Tips and_tricksvim - Tips and_tricks
vim - Tips and_tricks
 
Approximation Algorithms
Approximation AlgorithmsApproximation Algorithms
Approximation Algorithms
 
Основы MATLAB. Лекция 1.
Основы MATLAB. Лекция 1.Основы MATLAB. Лекция 1.
Основы MATLAB. Лекция 1.
 
Administración de Tablespace en PostgreSQL
Administración de Tablespace en PostgreSQLAdministración de Tablespace en PostgreSQL
Administración de Tablespace en PostgreSQL
 
5.3 dynamic programming
5.3 dynamic programming5.3 dynamic programming
5.3 dynamic programming
 
Diapositiva de prueba
Diapositiva de pruebaDiapositiva de prueba
Diapositiva de prueba
 

Andere mochten auch

Tipos de memoria.
Tipos de memoria.Tipos de memoria.
Tipos de memoria.camilo199
 
Original Curry
Original CurryOriginal Curry
Original CurryPATISELE
 
LI -T5: Resolución proposicional
LI -T5: Resolución proposicionalLI -T5: Resolución proposicional
LI -T5: Resolución proposicionalJosé A. Alonso
 
LI2011-T9: Formas normales de Skolem y cláusulas
LI2011-T9: Formas normales de Skolem y cláusulasLI2011-T9: Formas normales de Skolem y cláusulas
LI2011-T9: Formas normales de Skolem y cláusulasJosé A. Alonso
 
Copy - Paste o modificar un trabajo ya elaborado: La nueva competencia del es...
Copy - Paste o modificar un trabajo ya elaborado: La nueva competencia del es...Copy - Paste o modificar un trabajo ya elaborado: La nueva competencia del es...
Copy - Paste o modificar un trabajo ya elaborado: La nueva competencia del es...Alonso Esquivel
 
Indicador estrategias heuristicas
Indicador estrategias heuristicasIndicador estrategias heuristicas
Indicador estrategias heuristicasVíctor Huertas
 
Exposicion Final Tesis Maestria
Exposicion Final Tesis MaestriaExposicion Final Tesis Maestria
Exposicion Final Tesis MaestriaJorge Obando
 
Tema 3: Tipos y clases en Haskell
Tema 3: Tipos y clases en HaskellTema 3: Tipos y clases en Haskell
Tema 3: Tipos y clases en HaskellJosé A. Alonso
 
Objeto virtual de aprendizaje (tablas de multiplicar para niños)
Objeto virtual de aprendizaje (tablas de multiplicar para niños) Objeto virtual de aprendizaje (tablas de multiplicar para niños)
Objeto virtual de aprendizaje (tablas de multiplicar para niños) Gustavo Roca Mendoza
 
MonograEl Perfil y las Funciones del Docente Universitario
MonograEl Perfil y las Funciones del Docente UniversitarioMonograEl Perfil y las Funciones del Docente Universitario
MonograEl Perfil y las Funciones del Docente UniversitarioLic Guillermo Mico
 
Programación funcional con haskell
Programación funcional con haskellProgramación funcional con haskell
Programación funcional con haskellSoftware Guru
 
65847050 perfil-del-docente-universitario-del-siglo-xxi
65847050 perfil-del-docente-universitario-del-siglo-xxi65847050 perfil-del-docente-universitario-del-siglo-xxi
65847050 perfil-del-docente-universitario-del-siglo-xxiBryan Mega Dos
 
Importancia del metodo y las tecnicas de estudio
Importancia del metodo y las tecnicas de estudioImportancia del metodo y las tecnicas de estudio
Importancia del metodo y las tecnicas de estudioChristian Sanchez
 
8. Evaluación Heurística (HCI 1)
8. Evaluación Heurística (HCI 1)8. Evaluación Heurística (HCI 1)
8. Evaluación Heurística (HCI 1)guestdf28b1
 

Andere mochten auch (20)

EJERCICIOS DE RECURSIVIDAD EN HASKELL
EJERCICIOS DE RECURSIVIDAD EN HASKELLEJERCICIOS DE RECURSIVIDAD EN HASKELL
EJERCICIOS DE RECURSIVIDAD EN HASKELL
 
Yesod Framework
Yesod FrameworkYesod Framework
Yesod Framework
 
Tipos de memoria.
Tipos de memoria.Tipos de memoria.
Tipos de memoria.
 
Bt haskell-1
Bt haskell-1Bt haskell-1
Bt haskell-1
 
Original Curry
Original CurryOriginal Curry
Original Curry
 
LI -T5: Resolución proposicional
LI -T5: Resolución proposicionalLI -T5: Resolución proposicional
LI -T5: Resolución proposicional
 
LI2011-T9: Formas normales de Skolem y cláusulas
LI2011-T9: Formas normales de Skolem y cláusulasLI2011-T9: Formas normales de Skolem y cláusulas
LI2011-T9: Formas normales de Skolem y cláusulas
 
Copy - Paste o modificar un trabajo ya elaborado: La nueva competencia del es...
Copy - Paste o modificar un trabajo ya elaborado: La nueva competencia del es...Copy - Paste o modificar un trabajo ya elaborado: La nueva competencia del es...
Copy - Paste o modificar un trabajo ya elaborado: La nueva competencia del es...
 
Indicador estrategias heuristicas
Indicador estrategias heuristicasIndicador estrategias heuristicas
Indicador estrategias heuristicas
 
Mapas graficos
Mapas graficosMapas graficos
Mapas graficos
 
Exposicion Final Tesis Maestria
Exposicion Final Tesis MaestriaExposicion Final Tesis Maestria
Exposicion Final Tesis Maestria
 
Tema 3: Tipos y clases en Haskell
Tema 3: Tipos y clases en HaskellTema 3: Tipos y clases en Haskell
Tema 3: Tipos y clases en Haskell
 
Didáctica expo equipo2
Didáctica expo equipo2Didáctica expo equipo2
Didáctica expo equipo2
 
Objeto virtual de aprendizaje (tablas de multiplicar para niños)
Objeto virtual de aprendizaje (tablas de multiplicar para niños) Objeto virtual de aprendizaje (tablas de multiplicar para niños)
Objeto virtual de aprendizaje (tablas de multiplicar para niños)
 
MonograEl Perfil y las Funciones del Docente Universitario
MonograEl Perfil y las Funciones del Docente UniversitarioMonograEl Perfil y las Funciones del Docente Universitario
MonograEl Perfil y las Funciones del Docente Universitario
 
Programación funcional con haskell
Programación funcional con haskellProgramación funcional con haskell
Programación funcional con haskell
 
65847050 perfil-del-docente-universitario-del-siglo-xxi
65847050 perfil-del-docente-universitario-del-siglo-xxi65847050 perfil-del-docente-universitario-del-siglo-xxi
65847050 perfil-del-docente-universitario-del-siglo-xxi
 
Importancia del metodo y las tecnicas de estudio
Importancia del metodo y las tecnicas de estudioImportancia del metodo y las tecnicas de estudio
Importancia del metodo y las tecnicas de estudio
 
Diplomado (c y tecnol)
Diplomado (c y tecnol)Diplomado (c y tecnol)
Diplomado (c y tecnol)
 
8. Evaluación Heurística (HCI 1)
8. Evaluación Heurística (HCI 1)8. Evaluación Heurística (HCI 1)
8. Evaluación Heurística (HCI 1)
 

Ähnlich wie Tema 6: Definiciones por recursión en Haskell

Ähnlich wie Tema 6: Definiciones por recursión en Haskell (20)

Tema 10-1x2
Tema 10-1x2Tema 10-1x2
Tema 10-1x2
 
Haskell
HaskellHaskell
Haskell
 
Tema 11: Aplicaciones de la programación funcional con Haskell
Tema 11: Aplicaciones de la programación funcional con HaskellTema 11: Aplicaciones de la programación funcional con Haskell
Tema 11: Aplicaciones de la programación funcional con Haskell
 
vectores y matrices2,2.pptx
vectores y matrices2,2.pptxvectores y matrices2,2.pptx
vectores y matrices2,2.pptx
 
Digitalizacion final mat00 2
Digitalizacion final mat00 2Digitalizacion final mat00 2
Digitalizacion final mat00 2
 
Practica i prolog
Practica i prologPractica i prolog
Practica i prolog
 
Tema 10: Evaluación perezosa en Haskell
Tema 10: Evaluación perezosa en HaskellTema 10: Evaluación perezosa en Haskell
Tema 10: Evaluación perezosa en Haskell
 
Curso de Nivelación de Algoritmos - Clase 4
Curso de Nivelación de Algoritmos - Clase 4Curso de Nivelación de Algoritmos - Clase 4
Curso de Nivelación de Algoritmos - Clase 4
 
Clase 09
Clase 09 Clase 09
Clase 09
 
Pilas Colas
Pilas ColasPilas Colas
Pilas Colas
 
Mat lab03
Mat lab03Mat lab03
Mat lab03
 
Tema 0 Repaso Programación en Java
Tema 0 Repaso Programación en JavaTema 0 Repaso Programación en Java
Tema 0 Repaso Programación en Java
 
Ejercicios Python parte 4
Ejercicios Python parte 4Ejercicios Python parte 4
Ejercicios Python parte 4
 
Tema 23: Técnicas de diseño descendente de algoritmos
Tema 23: Técnicas de diseño descendente de algoritmosTema 23: Técnicas de diseño descendente de algoritmos
Tema 23: Técnicas de diseño descendente de algoritmos
 
Tema 1: Introducción a la programación funcional.
Tema 1: Introducción a la programación funcional.Tema 1: Introducción a la programación funcional.
Tema 1: Introducción a la programación funcional.
 
Haskell - Intro
Haskell - IntroHaskell - Intro
Haskell - Intro
 
Comandos r
Comandos rComandos r
Comandos r
 
Simulacro funciones 4_eso
Simulacro funciones 4_esoSimulacro funciones 4_eso
Simulacro funciones 4_eso
 
Pf con scala
Pf con scalaPf con scala
Pf con scala
 
11°letra
11°letra11°letra
11°letra
 

Mehr von José A. Alonso

Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.José A. Alonso
 
I1M-T19: El TAD de los árboles de búsqueda
I1M-T19: El TAD de los árboles de búsquedaI1M-T19: El TAD de los árboles de búsqueda
I1M-T19: El TAD de los árboles de búsquedaJosé A. Alonso
 
I1M-T17: El TAD de los conjuntos
I1M-T17: El TAD de los conjuntosI1M-T17: El TAD de los conjuntos
I1M-T17: El TAD de los conjuntosJosé A. Alonso
 
Panorama de la demostración asistida por ordenador
Panorama de la demostración asistida por ordenadorPanorama de la demostración asistida por ordenador
Panorama de la demostración asistida por ordenadorJosé A. Alonso
 
LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenJosé A. Alonso
 
LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenJosé A. Alonso
 
LMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicionalLMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicionalJosé A. Alonso
 
LMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalLMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalJosé A. Alonso
 
LMF-T3: Tableros semánticos
LMF-T3: Tableros semánticosLMF-T3: Tableros semánticos
LMF-T3: Tableros semánticosJosé A. Alonso
 
LMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicionalLMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicionalJosé A. Alonso
 
I1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en HaskellI1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en HaskellJosé A. Alonso
 
LMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicionalLMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicionalJosé A. Alonso
 
LI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con PrologLI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con PrologJosé A. Alonso
 
LI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer ordenLI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer ordenJosé A. Alonso
 
LI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. AplicacionesLI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. AplicacionesJosé A. Alonso
 
Panorama del razonamiento automático
Panorama del razonamiento automáticoPanorama del razonamiento automático
Panorama del razonamiento automáticoJosé A. Alonso
 
I1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en HaskellI1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en HaskellJosé A. Alonso
 
LI2011-T11: Resolución en lógica de primer orden
LI2011-T11: Resolución en lógica de primer ordenLI2011-T11: Resolución en lógica de primer orden
LI2011-T11: Resolución en lógica de primer ordenJosé A. Alonso
 
I1M2010-T23: Técnicas de diseño descendente de algoritmos.
I1M2010-T23: Técnicas de diseño descendente de algoritmos.I1M2010-T23: Técnicas de diseño descendente de algoritmos.
I1M2010-T23: Técnicas de diseño descendente de algoritmos.José A. Alonso
 

Mehr von José A. Alonso (20)

Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.
 
I1M-T19: El TAD de los árboles de búsqueda
I1M-T19: El TAD de los árboles de búsquedaI1M-T19: El TAD de los árboles de búsqueda
I1M-T19: El TAD de los árboles de búsqueda
 
I1M-T17: El TAD de los conjuntos
I1M-T17: El TAD de los conjuntosI1M-T17: El TAD de los conjuntos
I1M-T17: El TAD de los conjuntos
 
Panorama de la demostración asistida por ordenador
Panorama de la demostración asistida por ordenadorPanorama de la demostración asistida por ordenador
Panorama de la demostración asistida por ordenador
 
LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer orden
 
LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer orden
 
LMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicionalLMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicional
 
LMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalLMF-T5: Resolución proposicional
LMF-T5: Resolución proposicional
 
LMF-T4: Formas normales
LMF-T4: Formas normalesLMF-T4: Formas normales
LMF-T4: Formas normales
 
LMF-T3: Tableros semánticos
LMF-T3: Tableros semánticosLMF-T3: Tableros semánticos
LMF-T3: Tableros semánticos
 
LMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicionalLMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicional
 
I1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en HaskellI1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en Haskell
 
LMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicionalLMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicional
 
LI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con PrologLI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con Prolog
 
LI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer ordenLI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer orden
 
LI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. AplicacionesLI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. Aplicaciones
 
Panorama del razonamiento automático
Panorama del razonamiento automáticoPanorama del razonamiento automático
Panorama del razonamiento automático
 
I1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en HaskellI1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en Haskell
 
LI2011-T11: Resolución en lógica de primer orden
LI2011-T11: Resolución en lógica de primer ordenLI2011-T11: Resolución en lógica de primer orden
LI2011-T11: Resolución en lógica de primer orden
 
I1M2010-T23: Técnicas de diseño descendente de algoritmos.
I1M2010-T23: Técnicas de diseño descendente de algoritmos.I1M2010-T23: Técnicas de diseño descendente de algoritmos.
I1M2010-T23: Técnicas de diseño descendente de algoritmos.
 

Kürzlich hochgeladen

Ley 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularLey 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularMooPandrea
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAJAVIER SOLIS NOYOLA
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxzulyvero07
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdfDemetrio Ccesa Rayme
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptxdeimerhdz21
 
Éteres. Química Orgánica. Propiedades y reacciones
Éteres. Química Orgánica. Propiedades y reaccionesÉteres. Química Orgánica. Propiedades y reacciones
Éteres. Química Orgánica. Propiedades y reaccionesLauraColom3
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxlupitavic
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arteRaquel Martín Contreras
 
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfEjercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfMaritzaRetamozoVera
 
Ecosistemas Natural, Rural y urbano 2021.pptx
Ecosistemas Natural, Rural y urbano  2021.pptxEcosistemas Natural, Rural y urbano  2021.pptx
Ecosistemas Natural, Rural y urbano 2021.pptxolgakaterin
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdfBaker Publishing Company
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSYadi Campos
 
plande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdfplande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdfenelcielosiempre
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfNancyLoaa
 

Kürzlich hochgeladen (20)

Ley 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularLey 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circular
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdf
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptx
 
Éteres. Química Orgánica. Propiedades y reacciones
Éteres. Química Orgánica. Propiedades y reaccionesÉteres. Química Orgánica. Propiedades y reacciones
Éteres. Química Orgánica. Propiedades y reacciones
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docx
 
Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.
 
Medición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptxMedición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptx
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arte
 
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfEjercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
Ecosistemas Natural, Rural y urbano 2021.pptx
Ecosistemas Natural, Rural y urbano  2021.pptxEcosistemas Natural, Rural y urbano  2021.pptx
Ecosistemas Natural, Rural y urbano 2021.pptx
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
 
plande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdfplande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdf
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdf
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 

Tema 6: Definiciones por recursión en Haskell

  • 1. Tema 6: Funciones recursivas Informática (2010–11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla
  • 2. IM Tema 6: Funciones recursivas Tema 6: Funciones recursivas 1. Recursión numérica 2. Recusión sobre lista 3. Recursión sobre varios argumentos 4. Recursión múltiple 5. Recursión mutua 6. Heurísticas para las definiciones recursivas 2 / 30
  • 3. IM Tema 6: Funciones recursivas Recursión numérica Tema 6: Funciones recursivas 1. Recursión numérica 2. Recusión sobre lista 3. Recursión sobre varios argumentos 4. Recursión múltiple 5. Recursión mutua 6. Heurísticas para las definiciones recursivas 3 / 30
  • 4. IM Tema 6: Funciones recursivas Recursión numérica Recursión numérica: El factorial La función factorial: factorial :: Integer -> Integer factorial 0 = 1 factorial (n + 1) = (n + 1) * factorial n Cálculo: factorial 3 = 3 * (factorial 2) = 3 * (2 * (factorial 1)) = 3 * (2 * (1 * (factorial 0))) = 3 * (2 * (1 * 1)) = 3 * (2 * 1) = 3 * 2 = 6 4 / 30
  • 5. IM Tema 6: Funciones recursivas Recursión numérica Recursión numérica: El producto Definición recursiva del producto: por :: Int -> Int -> Int m `por` 0 = 0 m `por` (n + 1) = m + (m `por` n) Cálculo: 3 `por` 2 = 3 + (3 `por` 1) = 3 + (3 + (3 `por` 0)) = 3 + (3 + 0) = 3 + 3 = 6 5 / 30
  • 6. IM Tema 6: Funciones recursivas Recusión sobre lista Tema 6: Funciones recursivas 1. Recursión numérica 2. Recusión sobre lista 3. Recursión sobre varios argumentos 4. Recursión múltiple 5. Recursión mutua 6. Heurísticas para las definiciones recursivas 6 / 30
  • 7. IM Tema 6: Funciones recursivas Recusión sobre lista Recursión sobre listas: La función product Producto de una lista de números: Prelude product :: Num a => [a] -> a product [] = 1 product (n:ns) = n * product ns Cálculo: product [7,5,2] = 7 * (product [5,2]) = 7 * (5 * (product [2])) = 7 * (5 * (2 * (product []))) = 7 * (5 * (2 * 1)) = 7 * (5 * 2) = 7 * 10 = 70 7 / 30
  • 8. IM Tema 6: Funciones recursivas Recusión sobre lista Recursión sobre listas: La función length Longitud de una lista: Prelude length :: [a] -> Int length [] = 0 length (_:xs) = 1 + length xs Cálculo: length [2,3,5] = 1 + (length [3,5]) = 1 + (1 + (length [5])) = 1 + (1 + (1 + (length []))) = 1 + (1 + (1 + 0)) = 1 + (1 + 1) = 1 + 2 = 3 8 / 30
  • 9. IM Tema 6: Funciones recursivas Recusión sobre lista Recursión sobre listas: La función reverse Inversa de una lista: Prelude reverse :: [a] -> [a] reverse [] = [] reverse (x:xs) = reverse xs ++ [x] Cálculo: reverse [2,5,3] = (reverse [5,3]) ++ [2] = ((reverse [3]) ++ [5]) ++ [2] = (((reverse []) ++ [3]) ++ [5]) ++ [2] = (([] ++ [3]) ++ [5]) ++ [2] = ([3] ++ [5]) ++ [2] = [3,5] ++ [2] = [3,5,2] 9 / 30
  • 10. IM Tema 6: Funciones recursivas Recusión sobre lista Recursión sobre listas: ++ Concatenación de listas: Prelude (++) :: [a] -> [a] -> [a] [] ++ ys = ys (x:xs) ++ ys = x : (xs ++ ys) Cálculo: [1,3,5] ++ [2,4] = 1:([3,5] ++ [2,4]) = 1:(3:([5] ++ [2,4])) = 1:(3:(5:([] ++ [2,4]))) = 1:(3:(5:[2,4])) = 1:(3:[5,2,4]) = 1:[3,5,2,4] = [1,3,5,2,4] 10 / 30
  • 11. IM Tema 6: Funciones recursivas Recusión sobre lista Recursión sobre listas: Inserción ordenada (inserta e xs) inserta el elemento e en la lista xs delante del primer elemento de xs mayor o igual que e. Por ejemplo, inserta 5 [2,4,7,3,6,8,10] [2,4,5,7,3,6,8,10] inserta :: Ord a => a -> [a] -> [a] inserta e [] = [e] inserta e (x:xs) | e <= x = e : (x:xs) | otherwise = x : inserta e xs Cálculo: inserta 4 [1,3,5,7] = 1:(inserta 4 [3,5,7]) = 1:(3:(inserta 4 [5,7])) = 1:(3:(4:(5:[7]))) = 1:(3:(4:[5,7])) = [1,3,4,5,7] 11 / 30
  • 12. IM Tema 6: Funciones recursivas Recusión sobre lista Recursión sobre listas: Ordenación por inserción (ordena_por_insercion xs) es la lista xs ordenada mediante inserción, Por ejemplo, ordena_por_insercion [2,4,3,6,3] [2,3,3,4,6] ordena_por_insercion :: Ord a => [a] -> [a] ordena_por_insercion [] = [] ordena_por_insercion (x:xs) = inserta x (ordena_por_insercion xs) Cálculo: ordena_por_insercion [7,9,6] = = inserta 7 (inserta 9 (inserta 6 [])) = inserta 7 (inserta 9 [6]) = inserta 7 [6,9] = [6,7,9] 12 / 30
  • 13. IM Tema 6: Funciones recursivas Recursión sobre varios argumentos Tema 6: Funciones recursivas 1. Recursión numérica 2. Recusión sobre lista 3. Recursión sobre varios argumentos 4. Recursión múltiple 5. Recursión mutua 6. Heurísticas para las definiciones recursivas 13 / 30
  • 14. IM Tema 6: Funciones recursivas Recursión sobre varios argumentos Recursión sobre varios argumentos: La función zip Emparejamiento de elementos (la función zip): Prelude zip :: [a] -> [b] -> [(a, b)] zip [] _ = [] zip _ [] = [] zip (x:xs) (y:ys) = (x,y) : zip xs ys Cálculo: zip [1,3,5] [2,4,6,8] = (1,2) : (zip [3,5] [4,6,8]) = (1,2) : ((3,4) : (zip [5] [6,8])) = (1,2) : ((3,4) : ((5,6) : (zip [] [8]))) = (1,2) : ((3,4) : ((5,6) : [])) = [(1,2),(3,4),(5,6)] 14 / 30
  • 15. IM Tema 6: Funciones recursivas Recursión sobre varios argumentos Recursión sobre varios argumentos: La función drop Eliminación de elementos iniciales: Prelude drop :: Int -> [a] -> [a] drop 0 xs = xs drop (n+1) [] = [] drop (n+1) (x:xs) = drop n xs Cálculo: drop 2 [5,7,9,4] | drop 5 [1,4] = drop 1 [7,9,4] | = drop 4 [4] = drop 0 [9,4] | = drop 1 [] = [9,4] | = [] 15 / 30
  • 16. IM Tema 6: Funciones recursivas Recursión múltiple Tema 6: Funciones recursivas 1. Recursión numérica 2. Recusión sobre lista 3. Recursión sobre varios argumentos 4. Recursión múltiple 5. Recursión mutua 6. Heurísticas para las definiciones recursivas 16 / 30
  • 17. IM Tema 6: Funciones recursivas Recursión múltiple Recursión múltiple: La función de Fibonacci La sucesión de Fibonacci es: 0,1,1,2,3,5,8,13,21,. . . . Sus dos primeros términos son 0 y 1 y los restantes se obtienen sumando los dos anteriores. (fibonacci n) es el n–ésimo término de la sucesión de Fibonacci. Por ejemplo, fibonacci 8 21 fibonacci :: Int -> Int fibonacci 0 = 0 fibonacci 1 = 1 fibonacci (n+2) = fibonacci n + fibonacci (n+1) 17 / 30
  • 18. IM Tema 6: Funciones recursivas Recursión múltiple Recursión múltiple: Ordenación rápida Algoritmo de ordenación rápida: ordena :: (Ord a) => [a] -> [a] ordena [] = [] ordena (x:xs) = (ordena menores) ++ [x] ++ (ordena mayores) where menores = [a | a <- xs, a <= x] mayores = [b | b <- xs, b > x] 18 / 30
  • 19. IM Tema 6: Funciones recursivas Recursión mutua Tema 6: Funciones recursivas 1. Recursión numérica 2. Recusión sobre lista 3. Recursión sobre varios argumentos 4. Recursión múltiple 5. Recursión mutua 6. Heurísticas para las definiciones recursivas 19 / 30
  • 20. IM Tema 6: Funciones recursivas Recursión mutua Recursión mutua: Par e impar Par e impar por recursión mutua: par :: Int -> Bool par 0 = True par (n+1) = impar n impar :: Int -> Bool impar 0 = False impar (n+1) = par n Cálculo: impar 3 | par 3 = par 2 | = impar 2 = impar 1 | = par 1 = par 0 | = impar 0 = True | = False 20 / 30
  • 21. IM Tema 6: Funciones recursivas Recursión mutua Recursión mutua: Posiciones pares e impares (pares xs) son los elementos de xs que ocupan posiciones pares. (impares xs) son los elementos de xs que ocupan posiciones impares. pares :: [a] -> [a] pares [] = [] pares (x:xs) = x : impares xs impares :: [a] -> [a] impares [] = [] impares (_:xs) = pares xs Cálculo: pares [1,3,5,7] = 1:(impares [3,5,7]) = 1:(pares [5,7]) = 1:(5:(impares [7])) = 1:(5:[]) = [1,5] 21 / 30
  • 22. IM Tema 6: Funciones recursivas Heurísticas para las definiciones recursivas Tema 6: Funciones recursivas 1. Recursión numérica 2. Recusión sobre lista 3. Recursión sobre varios argumentos 4. Recursión múltiple 5. Recursión mutua 6. Heurísticas para las definiciones recursivas 22 / 30
  • 23. IM Tema 6: Funciones recursivas Heurísticas para las definiciones recursivas Aplicación del método: La función product Paso 1: Definir el tipo: product :: [Int] -> Int Paso 2: Enumerar los casos: product :: [Int] -> Int product [] = product (n:ns) = Paso 3: Definir los casos simples: product :: [Int] -> Int product [] = 1 product (n:ns) = 23 / 30
  • 24. IM Tema 6: Funciones recursivas Heurísticas para las definiciones recursivas Aplicación del método: La función product Paso 4: Definir los otros casos: product :: [Int] -> Int product [] = 1 product (n:ns) = n * product ns Paso 5: Generalizar y simplificar: product :: Num a => [a] -> a product = foldr (*) 1 donde (foldr op e l) pliega por la derecha la lista l colocando el operador op entre sus elementos y el elemento e al final. Por ejemplo, foldr (+) 6 [2,3,5] 2+(3+(5+6)) 16 foldr (-) 6 [2,3,5] 2-(3-(5-6)) -2 24 / 30
  • 25. IM Tema 6: Funciones recursivas Heurísticas para las definiciones recursivas Aplicación del método: La función drop Paso 1: Definir el tipo: drop :: Int -> [a] -> [a] Paso 2: Enumerar los casos: drop :: Int -> [a] -> [a] drop 0 [] = drop 0 (x:xs) = drop (n+1) [] = drop (n+1) (x:xs) = 25 / 30
  • 26. IM Tema 6: Funciones recursivas Heurísticas para las definiciones recursivas Aplicación del método: La función drop Paso 3: Definir los casos simples: drop :: Int -> [a] -> [a] drop 0 [] = [] drop 0 (x:xs) = x:xs drop (n+1) [] = [] drop (n+1) (x:xs) = Paso 4: Definir los otros casos: drop :: Int -> [a] -> [a] drop 0 [] = [] drop 0 (x:xs) = x:xs drop (n+1) [] = [] drop (n+1) (x:xs) = drop n xs 26 / 30
  • 27. IM Tema 6: Funciones recursivas Heurísticas para las definiciones recursivas Aplicación del método: La función drop Paso 5: Generalizar y simplificar: drop :: Integral b => b -> [a] -> [a] drop 0 xs = xs drop (n+1) [] = [] drop (n+1) (_:xs) = drop n xs 27 / 30
  • 28. IM Tema 6: Funciones recursivas Heurísticas para las definiciones recursivas Aplicación del método: La función init init elimina el último elemento de una lista no vacía. Paso 1: Definir el tipo: init :: [a] -> [a] Paso 2: Enumerar los casos: init :: [a] -> [a] init (x:xs) = Paso 3: Definir los casos simples: init :: [a] -> [a] init (x:xs) | null xs = [] | otherwise = 28 / 30
  • 29. IM Tema 6: Funciones recursivas Heurísticas para las definiciones recursivas Aplicación del método: La función init Paso 4: Definir los otros casos: init :: [a] -> [a] init (x:xs) | null xs = [] | otherwise = x : init xs Paso 5: Generalizar y simplificar: init :: [a] -> [a] init [_] = [] init (x:xs) = x : init xs 29 / 30
  • 30. IM Tema 6: Funciones recursivas Bibliografía Bibliografía 1. R. Bird. Introducción a la programación funcional con Haskell. Prentice Hall, 2000. Cap. 3: Números. Cap. 4: Listas. 2. G. Hutton Programming in Haskell. Cambridge University Press, 2007. Cap. 6: Recursive functions. 3. B. O’Sullivan, D. Stewart y J. Goerzen Real World Haskell. O’Reilly, 2008. Cap. 2: Types and Functions. 4. B.C. Ruiz, F. Gutiérrez, P. Guerrero y J.E. Gallardo. Razonando con Haskell. Thompson, 2004. Cap. 2: Introducción a Haskell. Cap. 6: Programación con listas. 5. S. Thompson. Haskell: The Craft of Functional Programming, Second Edition. Addison-Wesley, 1999. Cap. 4: Designing and writing programs. 30 / 30