PDF de programación - Tema 7: Funciones de orden superior - Informática (2016–17)

Tema 7: Funciones de orden superior - Informática (2016–17)gráfica de visualizaciones

Publicado el 6 de Agosto del 2017
593 visualizaciones desde el 6 de Agosto del 2017
267,3 KB
62 paginas
Creado hace 7a (12/09/2016)
Tema 7: Funciones de orden superior

Informática (2016–17)

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 7: Funciones de orden superior

Tema 7: Funciones de orden superior
1. Funciones de orden superior
2. Procesamiento de listas

La función map
La función filter

3. Función de plegado por la derecha: foldr
4. Función de plegado por la izquierda: foldl
5. Composición de funciones
6. Caso de estudio: Codificación binaria y transmisión de cadenas

Cambio de bases
Codificación y descodificación

2 / 36

IM Tema 7: Funciones de orden superior

Funciones de orden superior

Funciones de orden superior

Una función es de orden superior si toma una función como

argumento o devuelve una función como resultado.

(dosVeces f x) es el resultado de aplicar f a f x. Por ejemplo,

dosVeces (*3) 2
dosVeces reverse [2,5,7] [2,5,7]

18

dosVeces :: (a -> a) -> a -> a
dosVeces f x = f (f x)

Prop: dosVeces reverse = id
donde id es la función identidad.

Prelude

id :: a -> a
id x =

x

3 / 36

IM Tema 7: Funciones de orden superior

Funciones de orden superior

Funciones de orden superior

Una función es de orden superior si toma una función como

argumento o devuelve una función como resultado.

(dosVeces f x) es el resultado de aplicar f a f x. Por ejemplo,

dosVeces (*3) 2
dosVeces reverse [2,5,7] [2,5,7]

18

dosVeces :: (a -> a) -> a -> a
dosVeces f x = f (f x)

Prop: dosVeces reverse = id
donde id es la función identidad.

Prelude

id :: a -> a
id x =

x

3 / 36

IM Tema 7: Funciones de orden superior

Funciones de orden superior

Usos de las funciones de orden superior

Definición de patrones de programación.

Aplicación de una función a todos los elementos de una lista.
Filtrado de listas por propiedades.
Patrones de recursión sobre listas.

Diseño de lenguajes de dominio específico:

Lenguajes para procesamiento de mensajes.
Analizadores sintácticos.
Procedimientos de entrada/salida.

Uso de las propiedades algebraicas de las funciones de orden

superior para razonar sobre programas.

4 / 36

IM Tema 7: Funciones de orden superior

Procesamiento de listas

La función map

Tema 7: Funciones de orden superior

1. Funciones de orden superior

2. Procesamiento de listas

La función map
La función filter

3. Función de plegado por la derecha: foldr

4. Función de plegado por la izquierda: foldl

5. Composición de funciones

6. Caso de estudio: Codificación binaria y transmisión de cadenas

5 / 36

IM Tema 7: Funciones de orden superior

Procesamiento de listas

La función map

La función map: Definición

(map f xs) es la lista obtenida aplicando f a cada elemento de

xs. Por ejemplo,
map (*2) [3,4,7]
map sqrt [1,2,4]
map even [1..5]

[6,8,14]
[1.0,1.4142135623731,2.0]
[False,True,False,True,False]

Definición de map por comprensión:

map :: (a -> b) -> [a] -> [b]
map f xs =

[f x | x <- xs]
Definición de map por recursión:

Prelude

map :: (a -> b) -> [a] -> [b]
map _ []
map f (x:xs) = f x : map f xs

= []

6 / 36

IM Tema 7: Funciones de orden superior

Procesamiento de listas

La función map

La función map: Definición

(map f xs) es la lista obtenida aplicando f a cada elemento de

xs. Por ejemplo,
map (*2) [3,4,7]
map sqrt [1,2,4]
map even [1..5]

[6,8,14]
[1.0,1.4142135623731,2.0]
[False,True,False,True,False]

Definición de map por comprensión:

map :: (a -> b) -> [a] -> [b]
map f xs =

[f x | x <- xs]
Definición de map por recursión:

Prelude

map :: (a -> b) -> [a] -> [b]
map _ []
map f (x:xs) = f x : map f xs

= []

6 / 36

IM Tema 7: Funciones de orden superior

Procesamiento de listas

La función map

La función map: Definición

(map f xs) es la lista obtenida aplicando f a cada elemento de

xs. Por ejemplo,
map (*2) [3,4,7]
map sqrt [1,2,4]
map even [1..5]

[6,8,14]
[1.0,1.4142135623731,2.0]
[False,True,False,True,False]

Definición de map por comprensión:

map :: (a -> b) -> [a] -> [b]
map f xs =

[f x | x <- xs]
Definición de map por recursión:

Prelude

map :: (a -> b) -> [a] -> [b]
map _ []
map f (x:xs) = f x : map f xs

= []

6 / 36

IM Tema 7: Funciones de orden superior

Procesamiento de listas

La función map

Relación entre sum y map

La función sum:

Prelude

sum :: [Int] -> Int
sum []
sum (x:xs) = x + sum xs

= 0

Propiedad: sum (map (2*) xs) = 2 * sum xs
Comprobación con QuickCheck:

prop_sum_map :: [Int] -> Bool
prop_sum_map xs = sum (map (2*) xs) == 2 * sum xs

*Main> quickCheck prop_sum_map
+++ OK, passed 100 tests.

7 / 36

IM Tema 7: Funciones de orden superior

Procesamiento de listas

La función map

Relación entre sum y map

La función sum:

Prelude

sum :: [Int] -> Int
sum []
sum (x:xs) = x + sum xs

= 0

Propiedad: sum (map (2*) xs) = 2 * sum xs
Comprobación con QuickCheck:

prop_sum_map :: [Int] -> Bool
prop_sum_map xs = sum (map (2*) xs) == 2 * sum xs

*Main> quickCheck prop_sum_map
+++ OK, passed 100 tests.

7 / 36

IM Tema 7: Funciones de orden superior

Procesamiento de listas

La función filter

Tema 7: Funciones de orden superior

1. Funciones de orden superior

2. Procesamiento de listas

La función map
La función filter

3. Función de plegado por la derecha: foldr

4. Función de plegado por la izquierda: foldl

5. Composición de funciones

6. Caso de estudio: Codificación binaria y transmisión de cadenas

8 / 36

IM Tema 7: Funciones de orden superior

Procesamiento de listas

La función filter

La función filter

filter p xs es la lista de los elementos de xs que cumplen la

propiedad p. Por ejemplo,
filter even [1,3,5,4,2,6,1] [4,2,6]
filter (>3) [1,3,5,4,2,6,1] [5,4,6]

Definición de filter por comprensión:

filter :: (a -> Bool) -> [a] -> [a]
filter p xs = [x | x <- xs, p x]

Definición de filter por recursión:
Prelude

filter :: (a -> Bool) -> [a] -> [a]
filter _ []
filter p (x:xs) | p x

= []
= x : filter p xs

| otherwise = filter p xs

9 / 36

IM Tema 7: Funciones de orden superior

Procesamiento de listas

La función filter

La función filter

filter p xs es la lista de los elementos de xs que cumplen la

propiedad p. Por ejemplo,
filter even [1,3,5,4,2,6,1] [4,2,6]
filter (>3) [1,3,5,4,2,6,1] [5,4,6]

Definición de filter por comprensión:

filter :: (a -> Bool) -> [a] -> [a]
filter p xs = [x | x <- xs, p x]

Definición de filter por recursión:
Prelude

filter :: (a -> Bool) -> [a] -> [a]
filter _ []
filter p (x:xs) | p x

= []
= x : filter p xs

| otherwise = filter p xs

9 / 36

IM Tema 7: Funciones de orden superior

Procesamiento de listas

La función filter

La función filter

filter p xs es la lista de los elementos de xs que cumplen la

propiedad p. Por ejemplo,
filter even [1,3,5,4,2,6,1] [4,2,6]
filter (>3) [1,3,5,4,2,6,1] [5,4,6]

Definición de filter por comprensión:

filter :: (a -> Bool) -> [a] -> [a]
filter p xs = [x | x <- xs, p x]

Definición de filter por recursión:
Prelude

filter :: (a -> Bool) -> [a] -> [a]
filter _ []
filter p (x:xs) | p x

= []
= x : filter p xs

| otherwise = filter p xs

9 / 36

IM Tema 7: Funciones de orden superior

Procesamiento de listas

La función filter

Uso conjunto de map y filter

sumaCuadradosPares xs es la suma de los cuadrados de los

números pares de la lista xs. Por ejemplo,
sumaCuadradosPares [1..5] 20

sumaCuadradosPares :: [Int] -> Int
sumaCuadradosPares xs = sum (map (^2) (filter even xs))

Definición por comprensión:

sumaCuadradosPares' :: [Int] -> Int
sumaCuadradosPares' xs = sum [x^2 | x <- xs, even x]

10 / 36

IM Tema 7: Funciones de orden superior

Procesamiento de listas

La función filter

Uso conjunto de map y filter

sumaCuadradosPares xs es la suma de los cuadrados de los

números pares de la lista xs. Por ejemplo,
sumaCuadradosPares [1..5] 20

sumaCuadradosPares :: [Int] -> Int
sumaCuadradosPares xs = sum (map (^2) (filter even xs))

Definición por comprensión:

sumaCuadradosPares' :: [Int] -> Int
sumaCuadradosPares' xs = sum [x^2 | x <- xs, even x]

10 / 36

IM Tema 7: Funciones de orden superior

Procesamiento de listas

La función filter

Uso conjunto de map y filter

sumaCuadradosPares xs es la suma de los cuadrados de los

números pares de la lista xs. Por ejemplo,
sumaCuadradosPares [1..5] 20

sumaCuadradosPares :: [Int] -> Int
sumaCuadradosPares xs = sum (map (^2) (filter even xs))

Definición por comprensión:

sumaCuadradosPares' :: [Int] -> Int
sumaCuadradosPares' xs = sum [x^2 | x <- xs, even x]

10 / 36

IM Tema 7: Funciones de orden superior

Procesamiento de listas

La función filter

Predefinidas de orden superior para procesar listas

all p xs se verifica si todos los elementos de xs cumplen la

any p xs se verifica si algún elemento de xs cumple la

propiedad p. Por ejemplo,
all odd [1,3,5] True
all odd [1,3,6] False

propiedad p. Por ejemplo,
any odd [1,3,5] True
any odd [2,4,6] False

takeWhile p xs es la lista de los elementos iniciales de xs que

verifican el predicado p. Por ejemplo,
takeWhile even [2,4,6,7,8,9] [2,4,6]

dropWhile p xs es la lista xs sin los elementos iniciales que

verifican el predicado p. Por ejemplo,
dropWhile even [2,4,6,7,8,9] [7,8,9]

11 / 36

IM Tema 7: Funciones de orden superior

Función de plegado por la derecha: foldr

Esquema básico de recursión sobre listas

Ejemplos de definiciones recursivas:
Prelude

= 0
= x + sum xs
= 1

sum []
sum (x:xs)
product []
product (x:xs) = x * produc
  • Links de descarga
http://lwp-l.com/pdf6124

Comentarios de: Tema 7: Funciones de orden superior - Informática (2016–17) (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad