tema 4: definición de funciones - informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf ·...
TRANSCRIPT
![Page 1: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/1.jpg)
Tema 4: Definición de funcionesInformática (2016–17)
José A. Alonso Jiménez
Grupo de Lógica ComputacionalDepartamento de Ciencias de la Computación e I.A.
Universidad de Sevilla
![Page 2: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/2.jpg)
IM Tema 4: Definición de funciones
Tema 4: Definición de funciones1. Definiciones por composición
2. Definiciones con condicionales
3. Definiciones con ecuaciones con guardas
4. Definiciones con equiparación de patronesConstantes como patronesVariables como patronesTuplas como patronesListas como patrones
5. Expresiones lambda
6. Secciones
2 / 22
![Page 3: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/3.jpg)
IM Tema 4: Definición de funcionesDefiniciones por composición
Definiciones por composiciónI Decidir si un carácter es un dígito:
PreludeisDigit :: Char -> Bool
isDigit c = c >= '0' && c <= '9'
I Decidir si un entero es par:Prelude
even :: (Integral a) => a -> Bool
even n = n `rem` 2 == 0
I Dividir una lista en su n–ésimo elemento:Prelude
splitAt :: Int -> [a] -> ([a],[a])
splitAt n xs = (take n xs, drop n xs)
3 / 22
![Page 4: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/4.jpg)
IM Tema 4: Definición de funcionesDefiniciones por composición
Definiciones por composiciónI Decidir si un carácter es un dígito:
PreludeisDigit :: Char -> Bool
isDigit c = c >= '0' && c <= '9'
I Decidir si un entero es par:Prelude
even :: (Integral a) => a -> Bool
even n = n `rem` 2 == 0
I Dividir una lista en su n–ésimo elemento:Prelude
splitAt :: Int -> [a] -> ([a],[a])
splitAt n xs = (take n xs, drop n xs)
3 / 22
![Page 5: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/5.jpg)
IM Tema 4: Definición de funcionesDefiniciones por composición
Definiciones por composiciónI Decidir si un carácter es un dígito:
PreludeisDigit :: Char -> Bool
isDigit c = c >= '0' && c <= '9'
I Decidir si un entero es par:Prelude
even :: (Integral a) => a -> Bool
even n = n `rem` 2 == 0
I Dividir una lista en su n–ésimo elemento:Prelude
splitAt :: Int -> [a] -> ([a],[a])
splitAt n xs = (take n xs, drop n xs)
3 / 22
![Page 6: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/6.jpg)
IM Tema 4: Definición de funcionesDefiniciones por composición
Definiciones por composiciónI Decidir si un carácter es un dígito:
PreludeisDigit :: Char -> Bool
isDigit c = c >= '0' && c <= '9'
I Decidir si un entero es par:Prelude
even :: (Integral a) => a -> Bool
even n = n `rem` 2 == 0
I Dividir una lista en su n–ésimo elemento:Prelude
splitAt :: Int -> [a] -> ([a],[a])
splitAt n xs = (take n xs, drop n xs)
3 / 22
![Page 7: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/7.jpg)
IM Tema 4: Definición de funcionesDefiniciones con condicionales
Definiciones con condicionales
I Calcular el valor absoluto (con condicionales):Prelude
abs :: Int -> Int
abs n = if n >= 0 then n else -n
I Calcular el signo de un número (con condicionales anidados):Prelude
signum :: Int -> Int
signum n = if n < 0 then (-1) else
if n == 0 then 0 else 1
4 / 22
![Page 8: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/8.jpg)
IM Tema 4: Definición de funcionesDefiniciones con condicionales
Definiciones con condicionales
I Calcular el valor absoluto (con condicionales):Prelude
abs :: Int -> Int
abs n = if n >= 0 then n else -n
I Calcular el signo de un número (con condicionales anidados):Prelude
signum :: Int -> Int
signum n = if n < 0 then (-1) else
if n == 0 then 0 else 1
4 / 22
![Page 9: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/9.jpg)
IM Tema 4: Definición de funcionesDefiniciones con condicionales
Definiciones con condicionales
I Calcular el valor absoluto (con condicionales):Prelude
abs :: Int -> Int
abs n = if n >= 0 then n else -n
I Calcular el signo de un número (con condicionales anidados):Prelude
signum :: Int -> Int
signum n = if n < 0 then (-1) else
if n == 0 then 0 else 1
4 / 22
![Page 10: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/10.jpg)
IM Tema 4: Definición de funcionesDefiniciones con ecuaciones con guardas
Definiciones con ecuaciones guardadas
I Calcular el valor absoluto (con ecuaciones guardadas):Prelude
abs n | n >= 0 = n
| otherwise = -n
I Calcular el signo de un número (con ecuaciones guardadas):Prelude
signum n | n < 0 = -1
| n == 0 = 0
| otherwise = 1
5 / 22
![Page 11: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/11.jpg)
IM Tema 4: Definición de funcionesDefiniciones con ecuaciones con guardas
Definiciones con ecuaciones guardadas
I Calcular el valor absoluto (con ecuaciones guardadas):Prelude
abs n | n >= 0 = n
| otherwise = -n
I Calcular el signo de un número (con ecuaciones guardadas):Prelude
signum n | n < 0 = -1
| n == 0 = 0
| otherwise = 1
5 / 22
![Page 12: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/12.jpg)
IM Tema 4: Definición de funcionesDefiniciones con ecuaciones con guardas
Definiciones con ecuaciones guardadas
I Calcular el valor absoluto (con ecuaciones guardadas):Prelude
abs n | n >= 0 = n
| otherwise = -n
I Calcular el signo de un número (con ecuaciones guardadas):Prelude
signum n | n < 0 = -1
| n == 0 = 0
| otherwise = 1
5 / 22
![Page 13: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/13.jpg)
IM Tema 4: Definición de funcionesDefiniciones con equiparación de patrones
Constantes como patrones
Tema 4: Definición de funciones
1. Definiciones por composición
2. Definiciones con condicionales
3. Definiciones con ecuaciones con guardas
4. Definiciones con equiparación de patronesConstantes como patronesVariables como patronesTuplas como patronesListas como patrones
5. Expresiones lambda
6. Secciones
6 / 22
![Page 14: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/14.jpg)
IM Tema 4: Definición de funcionesDefiniciones con equiparación de patrones
Constantes como patrones
Definiciones con equiparación de patrones: Constantes
I Calcular la negación:Prelude
not :: Bool -> Bool
not True = False
not False = True
I Calcular la conjunción (con valores):Prelude
(&&) :: Bool -> Bool -> Bool
True && True = True
True && False = False
False && True = False
False && False = False
7 / 22
![Page 15: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/15.jpg)
IM Tema 4: Definición de funcionesDefiniciones con equiparación de patrones
Constantes como patrones
Definiciones con equiparación de patrones: Constantes
I Calcular la negación:Prelude
not :: Bool -> Bool
not True = False
not False = True
I Calcular la conjunción (con valores):Prelude
(&&) :: Bool -> Bool -> Bool
True && True = True
True && False = False
False && True = False
False && False = False
7 / 22
![Page 16: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/16.jpg)
IM Tema 4: Definición de funcionesDefiniciones con equiparación de patrones
Constantes como patrones
Definiciones con equiparación de patrones: Constantes
I Calcular la negación:Prelude
not :: Bool -> Bool
not True = False
not False = True
I Calcular la conjunción (con valores):Prelude
(&&) :: Bool -> Bool -> Bool
True && True = True
True && False = False
False && True = False
False && False = False
7 / 22
![Page 17: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/17.jpg)
IM Tema 4: Definición de funcionesDefiniciones con equiparación de patrones
Variables como patrones
Tema 4: Definición de funciones
1. Definiciones por composición
2. Definiciones con condicionales
3. Definiciones con ecuaciones con guardas
4. Definiciones con equiparación de patronesConstantes como patronesVariables como patronesTuplas como patronesListas como patrones
5. Expresiones lambda
6. Secciones
8 / 22
![Page 18: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/18.jpg)
IM Tema 4: Definición de funcionesDefiniciones con equiparación de patrones
Variables como patrones
Definiciones con equiparación de patrones: Variables
I Calcular la conjunción (con variables anónimas):Prelude
(&&) :: Bool -> Bool -> Bool
True && True = True
_ && _ = False
I Calcular la conjunción (con variables):Prelude
(&&) :: Bool -> Bool -> Bool
True && x = x
False && _ = False
9 / 22
![Page 19: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/19.jpg)
IM Tema 4: Definición de funcionesDefiniciones con equiparación de patrones
Variables como patrones
Definiciones con equiparación de patrones: Variables
I Calcular la conjunción (con variables anónimas):Prelude
(&&) :: Bool -> Bool -> Bool
True && True = True
_ && _ = False
I Calcular la conjunción (con variables):Prelude
(&&) :: Bool -> Bool -> Bool
True && x = x
False && _ = False
9 / 22
![Page 20: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/20.jpg)
IM Tema 4: Definición de funcionesDefiniciones con equiparación de patrones
Variables como patrones
Definiciones con equiparación de patrones: Variables
I Calcular la conjunción (con variables anónimas):Prelude
(&&) :: Bool -> Bool -> Bool
True && True = True
_ && _ = False
I Calcular la conjunción (con variables):Prelude
(&&) :: Bool -> Bool -> Bool
True && x = x
False && _ = False
9 / 22
![Page 21: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/21.jpg)
IM Tema 4: Definición de funcionesDefiniciones con equiparación de patrones
Tuplas como patrones
Tema 4: Definición de funciones
1. Definiciones por composición
2. Definiciones con condicionales
3. Definiciones con ecuaciones con guardas
4. Definiciones con equiparación de patronesConstantes como patronesVariables como patronesTuplas como patronesListas como patrones
5. Expresiones lambda
6. Secciones
10 / 22
![Page 22: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/22.jpg)
IM Tema 4: Definición de funcionesDefiniciones con equiparación de patrones
Tuplas como patrones
Definiciones con equiparación de patrones: Tuplas
I Calcular el primer elemento de un par:Prelude
fst :: (a,b) -> a
fst (x,_) = x
I Calcular el segundo elemento de un par:Prelude
snd :: (a,b) -> b
snd (_,y) = y
11 / 22
![Page 23: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/23.jpg)
IM Tema 4: Definición de funcionesDefiniciones con equiparación de patrones
Tuplas como patrones
Definiciones con equiparación de patrones: Tuplas
I Calcular el primer elemento de un par:Prelude
fst :: (a,b) -> a
fst (x,_) = x
I Calcular el segundo elemento de un par:Prelude
snd :: (a,b) -> b
snd (_,y) = y
11 / 22
![Page 24: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/24.jpg)
IM Tema 4: Definición de funcionesDefiniciones con equiparación de patrones
Tuplas como patrones
Definiciones con equiparación de patrones: Tuplas
I Calcular el primer elemento de un par:Prelude
fst :: (a,b) -> a
fst (x,_) = x
I Calcular el segundo elemento de un par:Prelude
snd :: (a,b) -> b
snd (_,y) = y
11 / 22
![Page 25: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/25.jpg)
IM Tema 4: Definición de funcionesDefiniciones con equiparación de patrones
Listas como patrones
Tema 4: Definición de funciones
1. Definiciones por composición
2. Definiciones con condicionales
3. Definiciones con ecuaciones con guardas
4. Definiciones con equiparación de patronesConstantes como patronesVariables como patronesTuplas como patronesListas como patrones
5. Expresiones lambda
6. Secciones
12 / 22
![Page 26: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/26.jpg)
IM Tema 4: Definición de funcionesDefiniciones con equiparación de patrones
Listas como patrones
Definiciones con equiparación de patrones: ListasI (test1 xs) se verifica si xs es una lista de 3 caracteres que
empieza por ’a’.
test1 :: [Char ] -> Bool
test1 ['a',_,_] = True
test1 _ = False
I Construcción de listas con (:)[1,2,3] = 1:[2,3] = 1:(2:[3]) = 1:(2:(3:[]))
I (test2 xs) se verifica si xs es una lista de caracteres queempieza por ’a’.
test2 :: [Char ] -> Bool
test2 ('a':_) = True
test2 _ = False
13 / 22
![Page 27: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/27.jpg)
IM Tema 4: Definición de funcionesDefiniciones con equiparación de patrones
Listas como patrones
Definiciones con equiparación de patrones: ListasI (test1 xs) se verifica si xs es una lista de 3 caracteres que
empieza por ’a’.
test1 :: [Char ] -> Bool
test1 ['a',_,_] = True
test1 _ = False
I Construcción de listas con (:)[1,2,3] = 1:[2,3] = 1:(2:[3]) = 1:(2:(3:[]))
I (test2 xs) se verifica si xs es una lista de caracteres queempieza por ’a’.
test2 :: [Char ] -> Bool
test2 ('a':_) = True
test2 _ = False
13 / 22
![Page 28: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/28.jpg)
IM Tema 4: Definición de funcionesDefiniciones con equiparación de patrones
Listas como patrones
Definiciones con equiparación de patrones: ListasI (test1 xs) se verifica si xs es una lista de 3 caracteres que
empieza por ’a’.
test1 :: [Char ] -> Bool
test1 ['a',_,_] = True
test1 _ = False
I Construcción de listas con (:)[1,2,3] = 1:[2,3] = 1:(2:[3]) = 1:(2:(3:[]))
I (test2 xs) se verifica si xs es una lista de caracteres queempieza por ’a’.
test2 :: [Char ] -> Bool
test2 ('a':_) = True
test2 _ = False
13 / 22
![Page 29: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/29.jpg)
IM Tema 4: Definición de funcionesDefiniciones con equiparación de patrones
Listas como patrones
Definiciones con equiparación de patrones: ListasI Decidir si una lista es vacía:
Preludenull :: [a] -> Bool
null [] = True
null (_:_) = False
I Primer elemento de una lista:Prelude
head :: [a] -> a
head (x:_) = x
I Resto de una lista:Prelude
tail :: [a] -> [a]
tail (_:xs) = xs
14 / 22
![Page 30: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/30.jpg)
IM Tema 4: Definición de funcionesDefiniciones con equiparación de patrones
Listas como patrones
Definiciones con equiparación de patrones: ListasI Decidir si una lista es vacía:
Preludenull :: [a] -> Bool
null [] = True
null (_:_) = False
I Primer elemento de una lista:Prelude
head :: [a] -> a
head (x:_) = x
I Resto de una lista:Prelude
tail :: [a] -> [a]
tail (_:xs) = xs
14 / 22
![Page 31: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/31.jpg)
IM Tema 4: Definición de funcionesDefiniciones con equiparación de patrones
Listas como patrones
Definiciones con equiparación de patrones: ListasI Decidir si una lista es vacía:
Preludenull :: [a] -> Bool
null [] = True
null (_:_) = False
I Primer elemento de una lista:Prelude
head :: [a] -> a
head (x:_) = x
I Resto de una lista:Prelude
tail :: [a] -> [a]
tail (_:xs) = xs
14 / 22
![Page 32: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/32.jpg)
IM Tema 4: Definición de funcionesDefiniciones con equiparación de patrones
Listas como patrones
Definiciones con equiparación de patrones: ListasI Decidir si una lista es vacía:
Preludenull :: [a] -> Bool
null [] = True
null (_:_) = False
I Primer elemento de una lista:Prelude
head :: [a] -> a
head (x:_) = x
I Resto de una lista:Prelude
tail :: [a] -> [a]
tail (_:xs) = xs
14 / 22
![Page 33: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/33.jpg)
IM Tema 4: Definición de funcionesExpresiones lambda
Expresiones lambda
I Las funciones pueden construirse sin nombrarlas mediante lasexpresiones lambda.
I Ejemplo de evaluación de expresiones lambda:Prelude> (\x -> x+x) 3
6
15 / 22
![Page 34: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/34.jpg)
IM Tema 4: Definición de funcionesExpresiones lambda
Expresiones lambda y parcializaciónUso de las expresiones lambda para resaltar la parcialización:
I (suma x y) es la suma de x e y.I Definición sin lambda:
suma x y = x+y
I Definición con lambda:
suma' = \x -> (\y -> x+y)
16 / 22
![Page 35: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/35.jpg)
IM Tema 4: Definición de funcionesExpresiones lambda
Expresiones lambda y parcializaciónUso de las expresiones lambda para resaltar la parcialización:
I (suma x y) es la suma de x e y.I Definición sin lambda:
suma x y = x+y
I Definición con lambda:
suma' = \x -> (\y -> x+y)
16 / 22
![Page 36: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/36.jpg)
IM Tema 4: Definición de funcionesExpresiones lambda
Expresiones lambda y parcializaciónUso de las expresiones lambda para resaltar la parcialización:
I (suma x y) es la suma de x e y.I Definición sin lambda:
suma x y = x+y
I Definición con lambda:
suma' = \x -> (\y -> x+y)
16 / 22
![Page 37: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/37.jpg)
IM Tema 4: Definición de funcionesExpresiones lambda
Expresiones lambda y funciones como resultadosUso de las expresiones lambda en funciones como resultados:
I (const x y) es x.I Definición sin lambda:
Preludeconst :: a -> b -> a
const x = x
I Definición con lambda:
const' :: a -> (b -> a)
const' x = \_ -> x
17 / 22
![Page 38: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/38.jpg)
IM Tema 4: Definición de funcionesExpresiones lambda
Expresiones lambda y funciones como resultadosUso de las expresiones lambda en funciones como resultados:
I (const x y) es x.I Definición sin lambda:
Preludeconst :: a -> b -> a
const x = x
I Definición con lambda:
const' :: a -> (b -> a)
const' x = \_ -> x
17 / 22
![Page 39: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/39.jpg)
IM Tema 4: Definición de funcionesExpresiones lambda
Expresiones lambda y funciones como resultadosUso de las expresiones lambda en funciones como resultados:
I (const x y) es x.I Definición sin lambda:
Preludeconst :: a -> b -> a
const x = x
I Definición con lambda:
const' :: a -> (b -> a)
const' x = \_ -> x
17 / 22
![Page 40: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/40.jpg)
IM Tema 4: Definición de funcionesExpresiones lambda
Expresiones lambda y funciones de sólo un usoUso de las expresiones lambda en funciones con sólo un uso:
I (impares n) es la lista de los n primeros números impares.I Definición sin lambda:
impares n = map f [0..n-1]
where f x = 2*x+1
I Definición con lambda:
impares' n = map (\x -> 2*x+1) [0..n-1]
18 / 22
![Page 41: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/41.jpg)
IM Tema 4: Definición de funcionesExpresiones lambda
Expresiones lambda y funciones de sólo un usoUso de las expresiones lambda en funciones con sólo un uso:
I (impares n) es la lista de los n primeros números impares.I Definición sin lambda:
impares n = map f [0..n-1]
where f x = 2*x+1
I Definición con lambda:
impares' n = map (\x -> 2*x+1) [0..n-1]
18 / 22
![Page 42: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/42.jpg)
IM Tema 4: Definición de funcionesExpresiones lambda
Expresiones lambda y funciones de sólo un usoUso de las expresiones lambda en funciones con sólo un uso:
I (impares n) es la lista de los n primeros números impares.I Definición sin lambda:
impares n = map f [0..n-1]
where f x = 2*x+1
I Definición con lambda:
impares' n = map (\x -> 2*x+1) [0..n-1]
18 / 22
![Page 43: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/43.jpg)
IM Tema 4: Definición de funcionesSecciones
SeccionesI Los operadores son las funciones que se escriben entre sus
argumentos.I Los operadores pueden convertirse en funciones prefijas
escribiéndolos entre paréntesis.I Ejemplo de conversión:
Prelude> 2 + 3
5
Prelude> (+) 2 3
5I Ejemplos de secciones:
Prelude> (2+) 3
5
Prelude> (+3) 2
5
19 / 22
![Page 44: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/44.jpg)
IM Tema 4: Definición de funcionesSecciones
Expresión de secciones mediante lambdasSea * un operador. Entonces
I (*) = \x -> (\y -> x*y)I (x*) = \y -> x*yI (*y) = \x -> x*y
20 / 22
![Page 45: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/45.jpg)
IM Tema 4: Definición de funcionesSecciones
Aplicaciones de seccionesI Uso en definiciones de funciones mediante secciones
suma' = (+)
siguiente = (1+)
inverso = (1/)
doble = (2*)
mitad = (/2)
I Uso en signatura de operadores:Prelude
(&&) :: Bool -> Bool -> Bool
I Uso como argumento:Prelude> map (2*) [1..5]
[2,4,6,8,10]
21 / 22
![Page 46: Tema 4: Definición de funciones - Informática (2016 17)jalonso/cursos/i1m-16/temas/tema-4.pdf · IMTema4: Definicióndefunciones Tema4:Definicióndefunciones 1.Definicionesporcomposición](https://reader033.vdocuments.net/reader033/viewer/2022053013/5f1062337e708231d448d754/html5/thumbnails/46.jpg)
IM Tema 4: Definición de funcionesBibliografía
Bibliografía1. R. Bird. Introducción a la programación funcional con Haskell.
Prentice Hall, 2000.I Cap. 1: Conceptos fundamentales.
2. G. Hutton Programming in Haskell. Cambridge University Press,2007.
I Cap. 4: Defining functions.3. B. O’Sullivan, D. Stewart y J. Goerzen Real World Haskell.
O’Reilly, 2008.I Cap. 2: Types and Functions.
4. B.C. Ruiz, F. Gutiérrez, P. Guerrero y J.E. Gallardo. Razonandocon Haskell. Thompson, 2004.
I Cap. 2: Introducción a Haskell.5. S. Thompson. Haskell: The Craft of Functional Programming,
Second Edition. Addison-Wesley, 1999.I Cap. 3: Basic types and definitions.
22 / 22