SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances (20)

Método por plegamiento Hash
Método por plegamiento HashMétodo por plegamiento Hash
Método por plegamiento Hash
 
Priority Queue in Data Structure
Priority Queue in Data StructurePriority Queue in Data Structure
Priority Queue in Data Structure
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Stack and queue
Stack and queueStack and queue
Stack and queue
 
Programacion orientada a objetos - unidad 3 herencia
Programacion orientada a objetos - unidad 3 herenciaProgramacion orientada a objetos - unidad 3 herencia
Programacion orientada a objetos - unidad 3 herencia
 
Arboles
ArbolesArboles
Arboles
 
Arboles TDAS
Arboles TDASArboles TDAS
Arboles TDAS
 
Pilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datosPilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datos
 
Estructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasEstructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colas
 
Lista Doblemente Enlazada
Lista Doblemente EnlazadaLista Doblemente Enlazada
Lista Doblemente Enlazada
 
Values and Data types in python
Values and Data types in pythonValues and Data types in python
Values and Data types in python
 
Lenguaje python en I+D. Numpy, Sympy y Pandas
Lenguaje python en I+D. Numpy, Sympy y PandasLenguaje python en I+D. Numpy, Sympy y Pandas
Lenguaje python en I+D. Numpy, Sympy y Pandas
 
Metodos Get y Set, finalmente revelados.
Metodos Get y Set, finalmente revelados.Metodos Get y Set, finalmente revelados.
Metodos Get y Set, finalmente revelados.
 
Stack data structure
Stack data structureStack data structure
Stack data structure
 
Pilas y colas
Pilas y colasPilas y colas
Pilas y colas
 
Reduction & Handle Pruning
Reduction & Handle PruningReduction & Handle Pruning
Reduction & Handle Pruning
 
Introduction to NumPy
Introduction to NumPyIntroduction to NumPy
Introduction to NumPy
 
Polimorfismo y herencia
Polimorfismo y herenciaPolimorfismo y herencia
Polimorfismo y herencia
 
Python decorators
Python decoratorsPython decorators
Python decorators
 
Python oop - class 2 (inheritance)
Python   oop - class 2 (inheritance)Python   oop - class 2 (inheritance)
Python oop - class 2 (inheritance)
 

En vedette

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
 
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
 
Herramientas heuristicas tec._de_estudio_corregido
Herramientas heuristicas tec._de_estudio_corregidoHerramientas heuristicas tec._de_estudio_corregido
Herramientas heuristicas tec._de_estudio_corregidoblmaturinarelys3
 

En vedette (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
 
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)
 
Herramientas heuristicas tec._de_estudio_corregido
Herramientas heuristicas tec._de_estudio_corregidoHerramientas heuristicas tec._de_estudio_corregido
Herramientas heuristicas tec._de_estudio_corregido
 

Similaire à Tema 6: Definiciones por recursión en Haskell

Similaire à 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
 

Plus de 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
 

Plus de 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.
 

Dernier

21 MARZO DIA INTERNACIONAL DOS BOSQUES.pdf
21 MARZO DIA INTERNACIONAL DOS BOSQUES.pdf21 MARZO DIA INTERNACIONAL DOS BOSQUES.pdf
21 MARZO DIA INTERNACIONAL DOS BOSQUES.pdfceeabarcia
 
Recursos Tecnológicos, página AIP-CRT 2 0 2 4.pdf
Recursos Tecnológicos, página  AIP-CRT 2 0 2 4.pdfRecursos Tecnológicos, página  AIP-CRT 2 0 2 4.pdf
Recursos Tecnológicos, página AIP-CRT 2 0 2 4.pdfNELLYKATTY
 
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTOCIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTOCEIP TIERRA DE PINARES
 
Semana Santa en Popayán para el año 2024
Semana Santa en Popayán para el año 2024Semana Santa en Popayán para el año 2024
Semana Santa en Popayán para el año 2024yaco173
 
Evaluacion Diagnostica Matematica 5to C2 Secundaria Ccesa007.pdf
Evaluacion Diagnostica Matematica 5to  C2 Secundaria Ccesa007.pdfEvaluacion Diagnostica Matematica 5to  C2 Secundaria Ccesa007.pdf
Evaluacion Diagnostica Matematica 5to C2 Secundaria Ccesa007.pdfDemetrio Ccesa Rayme
 
CIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCERO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCEROCIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCERO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCEROCEIP TIERRA DE PINARES
 
Evaluacion Diagnostica Matematica 5to C1 Secundaria Ccesa007.pdf
Evaluacion Diagnostica Matematica 5to  C1 Secundaria Ccesa007.pdfEvaluacion Diagnostica Matematica 5to  C1 Secundaria Ccesa007.pdf
Evaluacion Diagnostica Matematica 5to C1 Secundaria Ccesa007.pdfDemetrio Ccesa Rayme
 
La Gatera de la Villa nº 51. Revista cultural sobre Madrid..
La Gatera de la Villa nº 51. Revista cultural sobre Madrid..La Gatera de la Villa nº 51. Revista cultural sobre Madrid..
La Gatera de la Villa nº 51. Revista cultural sobre Madrid..La Gatera de la Villa
 
GUÍA SIANET - Agenda - Tareas - Archivos - Participaciones - Notas.pdf
GUÍA SIANET - Agenda - Tareas - Archivos - Participaciones - Notas.pdfGUÍA SIANET - Agenda - Tareas - Archivos - Participaciones - Notas.pdf
GUÍA SIANET - Agenda - Tareas - Archivos - Participaciones - Notas.pdfNELLYKATTY
 
Tarea 2 - Sociologia de la organizacion-1.docx
Tarea 2 - Sociologia de la organizacion-1.docxTarea 2 - Sociologia de la organizacion-1.docx
Tarea 2 - Sociologia de la organizacion-1.docxmiguelramosvse
 
1ro Programación Anual D.P.C.C ACTUALIZADO
1ro Programación Anual D.P.C.C ACTUALIZADO1ro Programación Anual D.P.C.C ACTUALIZADO
1ro Programación Anual D.P.C.C ACTUALIZADODJElvitt
 
Escrito administrativo técnico y comerciales
Escrito administrativo técnico y comercialesEscrito administrativo técnico y comerciales
Escrito administrativo técnico y comercialesmelanieteresacontrer
 
La poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didáctica
La poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didácticaLa poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didáctica
La poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didácticaIGNACIO BALLESTER PARDO
 
Evaluacion Diagnostica Matematica 2do C1 Secundaria Ccesa007.pdf
Evaluacion Diagnostica Matematica 2do C1 Secundaria Ccesa007.pdfEvaluacion Diagnostica Matematica 2do C1 Secundaria Ccesa007.pdf
Evaluacion Diagnostica Matematica 2do C1 Secundaria Ccesa007.pdfDemetrio Ccesa Rayme
 
la forma de los objetos expresión gráfica preescolar
la forma de los objetos expresión gráfica preescolarla forma de los objetos expresión gráfica preescolar
la forma de los objetos expresión gráfica preescolarCa Ut
 
CARPETA PEDAGÓGICA 2024.docx para educacion
CARPETA PEDAGÓGICA 2024.docx para educacionCARPETA PEDAGÓGICA 2024.docx para educacion
CARPETA PEDAGÓGICA 2024.docx para educacionCarolVigo1
 
La Congregación de Jesús y María, conocida también como los Eudistas, fue fun...
La Congregación de Jesús y María, conocida también como los Eudistas, fue fun...La Congregación de Jesús y María, conocida también como los Eudistas, fue fun...
La Congregación de Jesús y María, conocida también como los Eudistas, fue fun...Unidad de Espiritualidad Eudista
 
Presentación del tema: tecnología educativa
Presentación del tema: tecnología educativaPresentación del tema: tecnología educativa
Presentación del tema: tecnología educativaricardoruizaleman
 

Dernier (20)

21 MARZO DIA INTERNACIONAL DOS BOSQUES.pdf
21 MARZO DIA INTERNACIONAL DOS BOSQUES.pdf21 MARZO DIA INTERNACIONAL DOS BOSQUES.pdf
21 MARZO DIA INTERNACIONAL DOS BOSQUES.pdf
 
Recursos Tecnológicos, página AIP-CRT 2 0 2 4.pdf
Recursos Tecnológicos, página  AIP-CRT 2 0 2 4.pdfRecursos Tecnológicos, página  AIP-CRT 2 0 2 4.pdf
Recursos Tecnológicos, página AIP-CRT 2 0 2 4.pdf
 
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTOCIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTO
 
Semana Santa en Popayán para el año 2024
Semana Santa en Popayán para el año 2024Semana Santa en Popayán para el año 2024
Semana Santa en Popayán para el año 2024
 
SITUACIÓN ACTUAL DE LA INVESTIGACIÓN. ENFERMERÍA
SITUACIÓN ACTUAL DE LA INVESTIGACIÓN. ENFERMERÍASITUACIÓN ACTUAL DE LA INVESTIGACIÓN. ENFERMERÍA
SITUACIÓN ACTUAL DE LA INVESTIGACIÓN. ENFERMERÍA
 
Evaluacion Diagnostica Matematica 5to C2 Secundaria Ccesa007.pdf
Evaluacion Diagnostica Matematica 5to  C2 Secundaria Ccesa007.pdfEvaluacion Diagnostica Matematica 5to  C2 Secundaria Ccesa007.pdf
Evaluacion Diagnostica Matematica 5to C2 Secundaria Ccesa007.pdf
 
CIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCERO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCEROCIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCERO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCERO
 
Evaluacion Diagnostica Matematica 5to C1 Secundaria Ccesa007.pdf
Evaluacion Diagnostica Matematica 5to  C1 Secundaria Ccesa007.pdfEvaluacion Diagnostica Matematica 5to  C1 Secundaria Ccesa007.pdf
Evaluacion Diagnostica Matematica 5to C1 Secundaria Ccesa007.pdf
 
La Gatera de la Villa nº 51. Revista cultural sobre Madrid..
La Gatera de la Villa nº 51. Revista cultural sobre Madrid..La Gatera de la Villa nº 51. Revista cultural sobre Madrid..
La Gatera de la Villa nº 51. Revista cultural sobre Madrid..
 
GUÍA SIANET - Agenda - Tareas - Archivos - Participaciones - Notas.pdf
GUÍA SIANET - Agenda - Tareas - Archivos - Participaciones - Notas.pdfGUÍA SIANET - Agenda - Tareas - Archivos - Participaciones - Notas.pdf
GUÍA SIANET - Agenda - Tareas - Archivos - Participaciones - Notas.pdf
 
Tarea 2 - Sociologia de la organizacion-1.docx
Tarea 2 - Sociologia de la organizacion-1.docxTarea 2 - Sociologia de la organizacion-1.docx
Tarea 2 - Sociologia de la organizacion-1.docx
 
1ro Programación Anual D.P.C.C ACTUALIZADO
1ro Programación Anual D.P.C.C ACTUALIZADO1ro Programación Anual D.P.C.C ACTUALIZADO
1ro Programación Anual D.P.C.C ACTUALIZADO
 
Escrito administrativo técnico y comerciales
Escrito administrativo técnico y comercialesEscrito administrativo técnico y comerciales
Escrito administrativo técnico y comerciales
 
La poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didáctica
La poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didácticaLa poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didáctica
La poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didáctica
 
VISITA DE ESTUDO À CRUZ VERMELHA _
VISITA DE ESTUDO À CRUZ VERMELHA                   _VISITA DE ESTUDO À CRUZ VERMELHA                   _
VISITA DE ESTUDO À CRUZ VERMELHA _
 
Evaluacion Diagnostica Matematica 2do C1 Secundaria Ccesa007.pdf
Evaluacion Diagnostica Matematica 2do C1 Secundaria Ccesa007.pdfEvaluacion Diagnostica Matematica 2do C1 Secundaria Ccesa007.pdf
Evaluacion Diagnostica Matematica 2do C1 Secundaria Ccesa007.pdf
 
la forma de los objetos expresión gráfica preescolar
la forma de los objetos expresión gráfica preescolarla forma de los objetos expresión gráfica preescolar
la forma de los objetos expresión gráfica preescolar
 
CARPETA PEDAGÓGICA 2024.docx para educacion
CARPETA PEDAGÓGICA 2024.docx para educacionCARPETA PEDAGÓGICA 2024.docx para educacion
CARPETA PEDAGÓGICA 2024.docx para educacion
 
La Congregación de Jesús y María, conocida también como los Eudistas, fue fun...
La Congregación de Jesús y María, conocida también como los Eudistas, fue fun...La Congregación de Jesús y María, conocida también como los Eudistas, fue fun...
La Congregación de Jesús y María, conocida también como los Eudistas, fue fun...
 
Presentación del tema: tecnología educativa
Presentación del tema: tecnología educativaPresentación del tema: tecnología educativa
Presentación del tema: tecnología educativa
 

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