Se presentan los patrones básicos de definición de funciones en Haskell: por composición, con condicionales, con guardas y con equiparación de patrones.
Este es el 4º tema del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m/temas.html
Tema 6: Definiciones por recursión en Haskell José A. Alonso
Se presentan los patrones de recursión en Haskell: recursión sobre los números naturales, sobre listas, recursión sobre varios argumentos, recursión múltiple y recursión mutua. También se presenta reglas heurísticas para definir funciones por recursión.
Este es el 6º tema del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m/temas.html
Tema 6: Definiciones por recursión en Haskell José A. Alonso
Se presentan los patrones de recursión en Haskell: recursión sobre los números naturales, sobre listas, recursión sobre varios argumentos, recursión múltiple y recursión mutua. También se presenta reglas heurísticas para definir funciones por recursión.
Este es el 6º tema del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m/temas.html
Esta presentación es parte del contenido del curso de Programación Avanzada impartido en la Universidad Rafael Landívar durante el año 2015.
Incluye los temas:
• Búsqueda por método secuencial
• Búsqueda por método binario
• Búsqueda por método hashing
Creado por Ing. Alvaro Enrique Ruano
Tema 9: Declaraciones de tipos y clases en HaskellJosé A. Alonso
Se presenta cómo definir nuevos tipos en Haskell (con type y data) y cómo diseñar definiciones de dunciones sobre dichos tipos. En particulas se consideran tipos recursivos (como los naturales, las listas y los árboles binarios).
Este es el 10º tema del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m-10/temas.html
Esta presentación le pertenece a Tania Landivar.
Las estructuras de datos lineales (vectores ) obliga afijar por adelantado el espacio a ocupar en memoria, de modo que, cuando se desea añadir un nuevo elemento que rebase el tamaño prefijado del array, no es posible realizar la operación sin que se produzca un error en tiempo de ejecución, para evitar esto se hace uso de las listas enlazadas.
Una lista enlazada es una colección o secuencia de elementos llamados nodos, dispuestos uno detrás de otro, en la que cada elemento se conecta al siguiente elemento por un “enlace” o “referencia”.
Tecnológico Nacional de México
ingeniería en Sistemas Computacionales
Programación Orientada a Objetos
Unidad 6 archivos
En este material se manejan archivos de texto y archivos binarios.
Tema 7: Funciones de orden superior en HaskellJosé A. Alonso
Se estudian las funciones de orden superior en Haskell, fundamentalmente map, filter y foldr.
Este es el 7º tema del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m/temas.html
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysqlConexión desde una aplicación en java a un bd en mysqlConexión desde una aplicación en java a un bd en mysqlConexión desde una aplicación en java a un bd en mysqlConexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
Esta presentación es parte del contenido del curso de Programación Avanzada impartido en la Universidad Rafael Landívar durante el año 2015.
Incluye los temas:
• Búsqueda por método secuencial
• Búsqueda por método binario
• Búsqueda por método hashing
Creado por Ing. Alvaro Enrique Ruano
Tema 9: Declaraciones de tipos y clases en HaskellJosé A. Alonso
Se presenta cómo definir nuevos tipos en Haskell (con type y data) y cómo diseñar definiciones de dunciones sobre dichos tipos. En particulas se consideran tipos recursivos (como los naturales, las listas y los árboles binarios).
Este es el 10º tema del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m-10/temas.html
Esta presentación le pertenece a Tania Landivar.
Las estructuras de datos lineales (vectores ) obliga afijar por adelantado el espacio a ocupar en memoria, de modo que, cuando se desea añadir un nuevo elemento que rebase el tamaño prefijado del array, no es posible realizar la operación sin que se produzca un error en tiempo de ejecución, para evitar esto se hace uso de las listas enlazadas.
Una lista enlazada es una colección o secuencia de elementos llamados nodos, dispuestos uno detrás de otro, en la que cada elemento se conecta al siguiente elemento por un “enlace” o “referencia”.
Tecnológico Nacional de México
ingeniería en Sistemas Computacionales
Programación Orientada a Objetos
Unidad 6 archivos
En este material se manejan archivos de texto y archivos binarios.
Tema 7: Funciones de orden superior en HaskellJosé A. Alonso
Se estudian las funciones de orden superior en Haskell, fundamentalmente map, filter y foldr.
Este es el 7º tema del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m/temas.html
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysqlConexión desde una aplicación en java a un bd en mysqlConexión desde una aplicación en java a un bd en mysqlConexión desde una aplicación en java a un bd en mysqlConexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
Haskell es un lenguaje funcional puro que ha encontrado una pequeña pero creciente y leal cantidad de usuarios en la industria y academia. Calificándolo como "El más avanzado de los lenguajes obsoletos", Gerlad J. Sussman (creador de Scheme) señala tanto al poder de Haskell como a las limitaciones de todos los lenguajes de programación existentes. ¿Qué lo hace especial o atractivo? ¿Vale la pena invertir nuestro tiempo en aprenderlo? En esta plática exploraremos las características más distintivas de Haskell, y como ejemplo exploraremos algunos escenarios de uso donde difícilmente tiene comparación.
Tema 2: Introducción a la programación con HaskellJosé A. Alonso
Se introduce el uso de GHC dentro de emacs.
Este es el 2º tema del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m/temas.html
Tema 11: Aplicaciones de la programación funcional con HaskellJosé A. Alonso
Se presenta tres casos de estudio de la programación funcional con Haskell: el problema del concurso "Cifras y letras", el problema de las reinas y la sucesión de Hamming.
Este es el 8º tema del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m-10/temas.html
I1M2010-T23: Técnicas de diseño descendente de algoritmos.José A. Alonso
Se implementan en Haskell los patrones de divide y vencerás y de búsqueda en espacios de estados. Se aplica los patrones a la ordenación por mezcla, ordenación rápida, 8-puzzle y a los problemas de de las N reinas, de la mochila y del cambio de monedas.
Este es el tema 23 del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m-10/temas.html
I1M-T21: El TAD de los polinomios en HaskellJosé A. Alonso
Se presenta el tipo abstracto (TAD) de los polinomios y se estudia tres implementaciones en Haskell (mediante tipos algebraicos, listas dispersas y listas densas). Además se comprueba con QUickCheck sus propiedades. Finalmente, se definen las operaciones con los polinomios mediante el TAD.
Este es el tema 21 del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m/temas.html
LMF-T1: Sintaxis y semántica de la lógica proposicionalJosé A. Alonso
Introducción a la sintaxis y a la semántica de la lógica proposicional.
Este es el tema 1 del curso "Lógica matemática y fundamentos" http://www.cs.us.es/~jalonso/cursos/lmf
Se presentan el algoritmo de DPLL para decir la conjuntos de cláusulas y ejemplos de planteamiento y solución de problemas lógicos con Prover9 y Mace4.
I1M2010-T24: Programación dinámica en HaskellJosé A. Alonso
Se implementan en Haskell el patrón de programación dinámica y se aplica a los siguientes problemas: producto de cadenas de matrices, árboles binarios de búsqueda optimales, caminos mínimos entre todos los pares de nodos de un grafo y problema del viajante.
Este es el tema 24 del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m-10/temas.html
LI2011-T11: Resolución en lógica de primer ordenJosé A. Alonso
Se presentan los algoritmos de unificación y resolución en lógica de primer orden.
Este es el tema 11 del curso de "Lógica informática". Más temas en http://www.cs.us.es/~jalonso/cursos/li/tema
LI2011-T9: Formas normales de Skolem y cláusulasJosé A. Alonso
Se presentan los procedimientos de transformación de fórmulas a formas normales de Skolem y cláusulas.
Este es el tema 9 del curso de "Lógica informática". Más temas en http://www.cs.us.es/~jalonso/cursos/li/tema
Un libro sin recetas, para la maestra y el maestro Fase 3.pdfsandradianelly
Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestr
Instrucciones del procedimiento para la oferta y la gestión conjunta del proceso de admisión a los centros públicos de primer ciclo de educación infantil de Pamplona para el curso 2024-2025.
3° UNIDAD 3 CUIDAMOS EL AMBIENTE RECICLANDO EN FAMILIA 933623393 PROF YESSENI...
I1M2011-T4: Definición de funciones en Haskell
1. Tema 4: Definición de funciones
Informática (2011–12)
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 4: Definición de funciones
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 patrones
Constantes como patrones
Variables como patrones
Tuplas como patrones
Listas como patrones
Patrones enteros
5. Expresiones lambda
6. Secciones
2 / 24
3. IM Tema 4: Definición de funciones
Definiciones por composición
Definiciones por composición
Decidir si un carácter es un dígito:
Prelude
isDigit :: Char -> Bool
isDigit c = c >= '0' && c <= '9'
Decidir si un entero es par:
Prelude
even :: (Integral a) => a -> Bool
even n = n `rem` 2 == 0
Dividir una lista en su n–ésimo elemento:
Prelude
splitAt :: Int -> [a] -> ([a],[a])
splitAt n xs = (take n xs, drop n xs)
3 / 24
4. IM Tema 4: Definición de funciones
Definiciones por composición
Definiciones por composición
Decidir si un carácter es un dígito:
Prelude
isDigit :: Char -> Bool
isDigit c = c >= '0' && c <= '9'
Decidir si un entero es par:
Prelude
even :: (Integral a) => a -> Bool
even n = n `rem` 2 == 0
Dividir una lista en su n–ésimo elemento:
Prelude
splitAt :: Int -> [a] -> ([a],[a])
splitAt n xs = (take n xs, drop n xs)
3 / 24
5. IM Tema 4: Definición de funciones
Definiciones por composición
Definiciones por composición
Decidir si un carácter es un dígito:
Prelude
isDigit :: Char -> Bool
isDigit c = c >= '0' && c <= '9'
Decidir si un entero es par:
Prelude
even :: (Integral a) => a -> Bool
even n = n `rem` 2 == 0
Dividir una lista en su n–ésimo elemento:
Prelude
splitAt :: Int -> [a] -> ([a],[a])
splitAt n xs = (take n xs, drop n xs)
3 / 24
6. IM Tema 4: Definición de funciones
Definiciones por composición
Definiciones por composición
Decidir si un carácter es un dígito:
Prelude
isDigit :: Char -> Bool
isDigit c = c >= '0' && c <= '9'
Decidir si un entero es par:
Prelude
even :: (Integral a) => a -> Bool
even n = n `rem` 2 == 0
Dividir una lista en su n–ésimo elemento:
Prelude
splitAt :: Int -> [a] -> ([a],[a])
splitAt n xs = (take n xs, drop n xs)
3 / 24
7. IM Tema 4: Definición de funciones
Definiciones con condicionales
Definiciones con condicionales
Calcular el valor absoluto (con condicionales):
Prelude
abs :: Int -> Int
abs n = if n >= 0 then n else -n
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 / 24
8. IM Tema 4: Definición de funciones
Definiciones con condicionales
Definiciones con condicionales
Calcular el valor absoluto (con condicionales):
Prelude
abs :: Int -> Int
abs n = if n >= 0 then n else -n
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 / 24
9. IM Tema 4: Definición de funciones
Definiciones con condicionales
Definiciones con condicionales
Calcular el valor absoluto (con condicionales):
Prelude
abs :: Int -> Int
abs n = if n >= 0 then n else -n
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 / 24
10. IM Tema 4: Definición de funciones
Definiciones con ecuaciones con guardas
Definiciones con ecuaciones guardadas
Calcular el valor absoluto (con ecuaciones guardadas):
Prelude
abs n | n >= 0 = n
| otherwise = -n
Calcular el signo de un número (con ecuaciones guardadas):
Prelude
signum n | n < 0 = -1
| n == 0 = 0
| otherwise = 1
5 / 24
11. IM Tema 4: Definición de funciones
Definiciones con ecuaciones con guardas
Definiciones con ecuaciones guardadas
Calcular el valor absoluto (con ecuaciones guardadas):
Prelude
abs n | n >= 0 = n
| otherwise = -n
Calcular el signo de un número (con ecuaciones guardadas):
Prelude
signum n | n < 0 = -1
| n == 0 = 0
| otherwise = 1
5 / 24
12. IM Tema 4: Definición de funciones
Definiciones con ecuaciones con guardas
Definiciones con ecuaciones guardadas
Calcular el valor absoluto (con ecuaciones guardadas):
Prelude
abs n | n >= 0 = n
| otherwise = -n
Calcular el signo de un número (con ecuaciones guardadas):
Prelude
signum n | n < 0 = -1
| n == 0 = 0
| otherwise = 1
5 / 24
13. IM Tema 4: Definición de funciones
Definiciones 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 patrones
Constantes como patrones
Variables como patrones
Tuplas como patrones
Listas como patrones
Patrones enteros
6 / 24
14. IM Tema 4: Definición de funciones
Definiciones con equiparación de patrones
Constantes como patrones
Definiciones con equiparación de patrones: Constantes
Calcular la negación:
Prelude
not :: Bool -> Bool
not True = False
not False = True
Calcular la conjunción (con valores):
Prelude
(&&) :: Bool -> Bool -> Bool
True && True = True
True && False = False
False && True = False
False && False = False
7 / 24
15. IM Tema 4: Definición de funciones
Definiciones con equiparación de patrones
Constantes como patrones
Definiciones con equiparación de patrones: Constantes
Calcular la negación:
Prelude
not :: Bool -> Bool
not True = False
not False = True
Calcular la conjunción (con valores):
Prelude
(&&) :: Bool -> Bool -> Bool
True && True = True
True && False = False
False && True = False
False && False = False
7 / 24
16. IM Tema 4: Definición de funciones
Definiciones con equiparación de patrones
Constantes como patrones
Definiciones con equiparación de patrones: Constantes
Calcular la negación:
Prelude
not :: Bool -> Bool
not True = False
not False = True
Calcular la conjunción (con valores):
Prelude
(&&) :: Bool -> Bool -> Bool
True && True = True
True && False = False
False && True = False
False && False = False
7 / 24
17. IM Tema 4: Definición de funciones
Definiciones 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 patrones
Constantes como patrones
Variables como patrones
Tuplas como patrones
Listas como patrones
Patrones enteros
8 / 24
18. IM Tema 4: Definición de funciones
Definiciones con equiparación de patrones
Variables como patrones
Definiciones con equiparación de patrones: Variables
Calcular la conjunción (con variables anónimas):
Prelude
(&&) :: Bool -> Bool -> Bool
True && True = True
_ && _ = False
Calcular la conjunción (con variables):
Prelude
(&&) :: Bool -> Bool -> Bool
True && x = x
False && _ = False
9 / 24
19. IM Tema 4: Definición de funciones
Definiciones con equiparación de patrones
Variables como patrones
Definiciones con equiparación de patrones: Variables
Calcular la conjunción (con variables anónimas):
Prelude
(&&) :: Bool -> Bool -> Bool
True && True = True
_ && _ = False
Calcular la conjunción (con variables):
Prelude
(&&) :: Bool -> Bool -> Bool
True && x = x
False && _ = False
9 / 24
20. IM Tema 4: Definición de funciones
Definiciones con equiparación de patrones
Variables como patrones
Definiciones con equiparación de patrones: Variables
Calcular la conjunción (con variables anónimas):
Prelude
(&&) :: Bool -> Bool -> Bool
True && True = True
_ && _ = False
Calcular la conjunción (con variables):
Prelude
(&&) :: Bool -> Bool -> Bool
True && x = x
False && _ = False
9 / 24
21. IM Tema 4: Definición de funciones
Definiciones 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 patrones
Constantes como patrones
Variables como patrones
Tuplas como patrones
Listas como patrones
Patrones enteros
10 / 24
22. IM Tema 4: Definición de funciones
Definiciones con equiparación de patrones
Tuplas como patrones
Definiciones con equiparación de patrones: Tuplas
Calcular el primer elemento de un par:
Prelude
fst :: (a,b) -> a
fst (x,_) = x
Calcular el segundo elemento de un par:
Prelude
snd :: (a,b) -> b
snd (_,y) = y
11 / 24
23. IM Tema 4: Definición de funciones
Definiciones con equiparación de patrones
Tuplas como patrones
Definiciones con equiparación de patrones: Tuplas
Calcular el primer elemento de un par:
Prelude
fst :: (a,b) -> a
fst (x,_) = x
Calcular el segundo elemento de un par:
Prelude
snd :: (a,b) -> b
snd (_,y) = y
11 / 24
24. IM Tema 4: Definición de funciones
Definiciones con equiparación de patrones
Tuplas como patrones
Definiciones con equiparación de patrones: Tuplas
Calcular el primer elemento de un par:
Prelude
fst :: (a,b) -> a
fst (x,_) = x
Calcular el segundo elemento de un par:
Prelude
snd :: (a,b) -> b
snd (_,y) = y
11 / 24
25. IM Tema 4: Definición de funciones
Definiciones 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 patrones
Constantes como patrones
Variables como patrones
Tuplas como patrones
Listas como patrones
Patrones enteros
12 / 24
26. IM Tema 4: Definición de funciones
Definiciones con equiparación de patrones
Listas como patrones
Definiciones con equiparación de patrones: Listas
(test1 xs) se verifica si xs es una lista de 3 caracteres que
empieza por ’a’.
test1 :: [Char ] -> Bool
test1 ['a',_,_] = True
test1 _ = False
Construcción de listas con (:)
[1,2,3] = 1:[2,3] = 1:(2:[3]) = 1:(2:(3:[]))
(test2 xs) se verifica si xs es una lista de caracteres que
empieza por ’a’.
test2 :: [Char ] -> Bool
test2 ('a':_) = True
test2 _ = False
13 / 24
27. IM Tema 4: Definición de funciones
Definiciones con equiparación de patrones
Listas como patrones
Definiciones con equiparación de patrones: Listas
(test1 xs) se verifica si xs es una lista de 3 caracteres que
empieza por ’a’.
test1 :: [Char ] -> Bool
test1 ['a',_,_] = True
test1 _ = False
Construcción de listas con (:)
[1,2,3] = 1:[2,3] = 1:(2:[3]) = 1:(2:(3:[]))
(test2 xs) se verifica si xs es una lista de caracteres que
empieza por ’a’.
test2 :: [Char ] -> Bool
test2 ('a':_) = True
test2 _ = False
13 / 24
28. IM Tema 4: Definición de funciones
Definiciones con equiparación de patrones
Listas como patrones
Definiciones con equiparación de patrones: Listas
(test1 xs) se verifica si xs es una lista de 3 caracteres que
empieza por ’a’.
test1 :: [Char ] -> Bool
test1 ['a',_,_] = True
test1 _ = False
Construcción de listas con (:)
[1,2,3] = 1:[2,3] = 1:(2:[3]) = 1:(2:(3:[]))
(test2 xs) se verifica si xs es una lista de caracteres que
empieza por ’a’.
test2 :: [Char ] -> Bool
test2 ('a':_) = True
test2 _ = False
13 / 24
29. IM Tema 4: Definición de funciones
Definiciones con equiparación de patrones
Listas como patrones
Definiciones con equiparación de patrones: Listas
Decidir si una lista es vacía:
Prelude
null :: [a] -> Bool
null [] = True
null (_:_) = False
Primer elemento de una lista:
Prelude
head :: [a] -> a
head (x:_) = x
Resto de una lista:
Prelude
tail :: [a] -> [a]
tail (_:xs) = xs
14 / 24
30. IM Tema 4: Definición de funciones
Definiciones con equiparación de patrones
Listas como patrones
Definiciones con equiparación de patrones: Listas
Decidir si una lista es vacía:
Prelude
null :: [a] -> Bool
null [] = True
null (_:_) = False
Primer elemento de una lista:
Prelude
head :: [a] -> a
head (x:_) = x
Resto de una lista:
Prelude
tail :: [a] -> [a]
tail (_:xs) = xs
14 / 24
31. IM Tema 4: Definición de funciones
Definiciones con equiparación de patrones
Listas como patrones
Definiciones con equiparación de patrones: Listas
Decidir si una lista es vacía:
Prelude
null :: [a] -> Bool
null [] = True
null (_:_) = False
Primer elemento de una lista:
Prelude
head :: [a] -> a
head (x:_) = x
Resto de una lista:
Prelude
tail :: [a] -> [a]
tail (_:xs) = xs
14 / 24
32. IM Tema 4: Definición de funciones
Definiciones con equiparación de patrones
Listas como patrones
Definiciones con equiparación de patrones: Listas
Decidir si una lista es vacía:
Prelude
null :: [a] -> Bool
null [] = True
null (_:_) = False
Primer elemento de una lista:
Prelude
head :: [a] -> a
head (x:_) = x
Resto de una lista:
Prelude
tail :: [a] -> [a]
tail (_:xs) = xs
14 / 24
33. IM Tema 4: Definición de funciones
Definiciones con equiparación de patrones
Patrones enteros
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 patrones
Constantes como patrones
Variables como patrones
Tuplas como patrones
Listas como patrones
Patrones enteros
15 / 24
34. IM Tema 4: Definición de funciones
Definiciones con equiparación de patrones
Patrones enteros
Definiciones con equiparación de patrones: Enteros
Predecesor de un número entero:
Prelude
pred :: Int -> Int
pred 0 = 0
pred (n+1) = n
Comentarios sobre los patrones n+k:
n+k sólo se equipara con números mayores o iguales que k
Hay que escribirlo entre paréntesis.
16 / 24
35. IM Tema 4: Definición de funciones
Definiciones con equiparación de patrones
Patrones enteros
Definiciones con equiparación de patrones: Enteros
Predecesor de un número entero:
Prelude
pred :: Int -> Int
pred 0 = 0
pred (n+1) = n
Comentarios sobre los patrones n+k:
n+k sólo se equipara con números mayores o iguales que k
Hay que escribirlo entre paréntesis.
16 / 24
36. IM Tema 4: Definición de funciones
Expresiones lambda
Expresiones lambda
Las funciones pueden construirse sin nombrarlas mediante las
expresiones lambda.
Ejemplo de evaluación de expresiones lambda:
Prelude> (x -> x+x) 3
6
17 / 24
37. IM Tema 4: Definición de funciones
Expresiones lambda
Expresiones lambda y parcialización
Uso de las expresiones lambda para resaltar la parcialización:
(suma x y) es la suma de x e y.
Definición sin lambda:
suma x y = x+y
Definición con lambda:
suma' = x -> (y -> x+y)
18 / 24
38. IM Tema 4: Definición de funciones
Expresiones lambda
Expresiones lambda y parcialización
Uso de las expresiones lambda para resaltar la parcialización:
(suma x y) es la suma de x e y.
Definición sin lambda:
suma x y = x+y
Definición con lambda:
suma' = x -> (y -> x+y)
18 / 24
39. IM Tema 4: Definición de funciones
Expresiones lambda
Expresiones lambda y parcialización
Uso de las expresiones lambda para resaltar la parcialización:
(suma x y) es la suma de x e y.
Definición sin lambda:
suma x y = x+y
Definición con lambda:
suma' = x -> (y -> x+y)
18 / 24
40. IM Tema 4: Definición de funciones
Expresiones lambda
Expresiones lambda y funciones como resultados
Uso de las expresiones lambda en funciones como resultados:
(const x y) es x.
Definición sin lambda:
Prelude
const :: a -> b -> a
const x = x
Definición con lambda:
const' :: a -> (b -> a)
const' x = _ -> x
19 / 24
41. IM Tema 4: Definición de funciones
Expresiones lambda
Expresiones lambda y funciones como resultados
Uso de las expresiones lambda en funciones como resultados:
(const x y) es x.
Definición sin lambda:
Prelude
const :: a -> b -> a
const x = x
Definición con lambda:
const' :: a -> (b -> a)
const' x = _ -> x
19 / 24
42. IM Tema 4: Definición de funciones
Expresiones lambda
Expresiones lambda y funciones como resultados
Uso de las expresiones lambda en funciones como resultados:
(const x y) es x.
Definición sin lambda:
Prelude
const :: a -> b -> a
const x = x
Definición con lambda:
const' :: a -> (b -> a)
const' x = _ -> x
19 / 24
43. IM Tema 4: Definición de funciones
Expresiones lambda
Expresiones lambda y funciones de sólo un uso
Uso de las expresiones lambda en funciones con sólo un uso:
(impares n) es la lista de los n primeros números impares.
Definición sin lambda:
impares n = map f [0..n-1]
where f x = 2*x+1
Definición con lambda:
impares' n = map (x -> 2*x+1) [0..n-1]
20 / 24
44. IM Tema 4: Definición de funciones
Expresiones lambda
Expresiones lambda y funciones de sólo un uso
Uso de las expresiones lambda en funciones con sólo un uso:
(impares n) es la lista de los n primeros números impares.
Definición sin lambda:
impares n = map f [0..n-1]
where f x = 2*x+1
Definición con lambda:
impares' n = map (x -> 2*x+1) [0..n-1]
20 / 24
45. IM Tema 4: Definición de funciones
Expresiones lambda
Expresiones lambda y funciones de sólo un uso
Uso de las expresiones lambda en funciones con sólo un uso:
(impares n) es la lista de los n primeros números impares.
Definición sin lambda:
impares n = map f [0..n-1]
where f x = 2*x+1
Definición con lambda:
impares' n = map (x -> 2*x+1) [0..n-1]
20 / 24
46. IM Tema 4: Definición de funciones
Secciones
Secciones
Los operadores son las funciones que se escriben entre sus
argumentos.
Los operadores pueden convertirse en funciones prefijas
escribiéndolos entre paréntesis.
Ejemplo de conversión:
Prelude> 2 + 3
5
Prelude> (+) 2 3
5
Ejemplos de secciones:
Prelude> (2+) 3
5
Prelude> (+3) 2
5
21 / 24
47. IM Tema 4: Definición de funciones
Secciones
Expresión de secciones mediante lambdas
Sea * un operador. Entonces
(*) = x -> (y -> x*y)
(x*) = y -> x*y
(*y) = x -> x*y
22 / 24
48. IM Tema 4: Definición de funciones
Secciones
Aplicaciones de secciones
Uso en definiciones de funciones mediante secciones
suma' = (+)
siguiente = (1+)
inverso = (1/)
doble = (2*)
mitad = (/2)
Uso en signatura de operadores:
Prelude
(&&) :: Bool -> Bool -> Bool
Uso como argumento:
Prelude> map (2*) [1..5]
[2,4,6,8,10]
23 / 24
49. IM Tema 4: Definición de funciones
Bibliografía
Bibliografía
1. R. Bird. Introducción a la programación funcional con Haskell.
Prentice Hall, 2000.
Cap. 1: Conceptos fundamentales.
2. G. Hutton Programming in Haskell. Cambridge University Press,
2007.
Cap. 4: Defining 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.
5. S. Thompson. Haskell: The Craft of Functional Programming,
Second Edition. Addison-Wesley, 1999.
Cap. 3: Basic types and definitions.
24 / 24