SlideShare una empresa de Scribd logo
Programación
Funcional en Haskell
Agustín Ramos Fonseca

#sgvirtual

Wednesday, October 23, 13
¿Qué es Haskell?

Wednesday, October 23, 13
Wednesday, October 23, 13
Un lenguaje de programación...

Wednesday, October 23, 13
Un lenguaje de programación...

• Funcional.

Wednesday, October 23, 13
Un lenguaje de programación...

• Funcional.
Las funciones son construcciones de primera clase.

Wednesday, October 23, 13
Un lenguaje de programación...

• Funcional.
Las funciones son construcciones de primera clase.

• Puro.

Wednesday, October 23, 13
Un lenguaje de programación...

• Funcional.
Las funciones son construcciones de primera clase.

• Puro.
Las funciones no tienen efectos colaterales.

Wednesday, October 23, 13
Un lenguaje de programación...

• Funcional.
Las funciones son construcciones de primera clase.

• Puro.
Las funciones no tienen efectos colaterales.

• De evaluación perezosa.

Wednesday, October 23, 13
Un lenguaje de programación...

• Funcional.
Las funciones son construcciones de primera clase.

• Puro.
Las funciones no tienen efectos colaterales.

• De evaluación perezosa.
Las expresiones se evalúan hasta que es requerido.

Wednesday, October 23, 13
Un lenguaje de programación...

• Funcional.
Las funciones son construcciones de primera clase.

• Puro.
Las funciones no tienen efectos colaterales.

• De evaluación perezosa.
Las expresiones se evalúan hasta que es requerido.

• De tipado estático.
Wednesday, October 23, 13
Un lenguaje de programación...

• Funcional.
Las funciones son construcciones de primera clase.

• Puro.
Las funciones no tienen efectos colaterales.

• De evaluación perezosa.
Las expresiones se evalúan hasta que es requerido.

• De tipado estático.
Con inferencia de tipos.
Wednesday, October 23, 13
Un poco de Historia

Wednesday, October 23, 13
Un poco de Historia

LISP
(John McCarthy)

1958

Wednesday, October 23, 13
Un poco de Historia

LISP
(John McCarthy)

1958

Wednesday, October 23, 13

ML y
Hope

1970’s
Un poco de Historia

LISP
(John McCarthy)

1958

Wednesday, October 23, 13

ML y
Hope

1970’s

1985
Un poco de Historia

LISP
(John McCarthy)

1958

ML y
Hope

1970’s

1985
FPCA '87

Wednesday, October 23, 13
Un poco de Historia

LISP
(John McCarthy)

1958

ML y
Hope

1970’s

1985
FPCA '87

¡Necesitamos Haskell!
Wednesday, October 23, 13
Un poco de Historia

LISP
(John McCarthy)

1958

ML y
Hope

1970’s

Haskell 1.0

1985

1990

FPCA '87

¡Necesitamos Haskell!
Wednesday, October 23, 13
Un poco de Historia

LISP
(John McCarthy)

1958

ML y
Hope

Haskell 1.0

Haskell ’98

1970’s

1985

1990

1998

FPCA '87

¡Necesitamos Haskell!
Wednesday, October 23, 13
Un poco de Historia

LISP
(John McCarthy)

1958

Haskell ’98
Revised Report

ML y
Hope

Haskell 1.0

Haskell ’98

1970’s

1985

1990

1998 2003

FPCA '87

¡Necesitamos Haskell!
Wednesday, October 23, 13
Un poco de Historia

LISP
(John McCarthy)

1958

Haskell ’98
Revised Report

ML y
Hope

Haskell 1.0

Haskell ’98

1970’s

1985

1990

1998 2003

Haskell 2010

2010

FPCA '87

¡Necesitamos Haskell!
Wednesday, October 23, 13
Motivación de los Sistemas de
Tipado Estático
import foo
def bar(baz, quux):
x = baz.do_something()
y = quux.do_something_else()
return x + y

Wednesday, October 23, 13
Motivación de los Sistemas de
Tipado Estático
# Los imports pueden tener efectos colaterales,
# como escribir en un archivo... o lanzar un misil.
import foo
def bar(baz, quux):
# baz puede ser cualquier objeto
# y podría no tener el método do_something()
x = baz.do_something()
# quux puede ser cualquier objeto y podría
# no ser capaz de ejecutaro do_something_else()
y = quux.do_something_else()
# El operador ‘+’ podría estar sobrecargado y
# hacer algo impredecible o simplemente fallar.
return x + y

Wednesday, October 23, 13
Características
•
•
•
•
•
•
•
•
•

List comprehensions.
Pattern matching.
Currying
Composición de funciones.
Infinite data structures.
Agebraic Data Types
Type classes.
Applicative Functors
Monads

Wednesday, October 23, 13
Ejemplos

Wednesday, October 23, 13
Tipos
Prelude > :t 2
2 :: Num a => a
Prelude > :t [1,2,3]
[1,2,3] :: Num t => [t]
Prelude > :t ["hola","mundo"]
["hola","mundo"] :: [[Char]]
Prelude > :t head
head :: [a] -> a
Prelude > :t [even,odd]
[even,odd] :: Integral a => [a -> Bool]

Wednesday, October 23, 13
Listas
Lista de Num
[1,2,3,4,5]
Lista (rango) de Char
[‘a’..’z’]
Lista de strings [Char]
[“hola”,”mundo”]

Wednesday, October 23, 13
Funciones sobre listas (1/2)
Prelude > head [1,2,3,4,5]
1
Prelude > tail [1..5]
[2,3,4,5]
Prelude > [1..5] !! 3
4
Prelude > take 2 [1..5]
[1,2]
Prelude > filter even [1..5]
[2,4]

Wednesday, October 23, 13
Funciones sobre listas (2/2)
Prelude > map (x -> x*x) [1..5]
[1,4,9,16,25]
Prelude > zip [1..5] ['a'..'e']
[(1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e')]
Prelude > zipWith (x y -> x + y) [1..5] [11..15]
[12,14,16,18,20]
Prelude > zipWith (+) [1..5] [11..15]
[12,14,16,18,20]
Prelude > foldl (+) 0 [1..5]
15

Wednesday, October 23, 13
Funciones
Area de un círculo
circleArea r = pi * r^ 0
Secuencia de Fibonacci
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)

Wednesday, October 23, 13
Funciones
QuickSort
quicksort :: Ord a => [a] -> [a]
quicksort []
= []
quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater)
where
lesser = filter (< p) xs
greater = filter (>= p) xs

Wednesday, October 23, 13
Funciones
Prelude
3
Prelude
3
Prelude
6
Prelude
2
Prelude
2
Prelude
True
Prelude
True

>1+2
> (+) 1 2
> (*) 2 3
> div 10 5
> 10 `div` 5
> ($) even 4
> even $ 4

Wednesday, October 23, 13
List comprehensions
Prelude > [ x | x <- [1..10] , even x ]
[2,4,6,8,10]
Prelude > [ (x,y) | x <- [1..5], y <- [1..5] , even x, odd y ]
[(2,1),(2,3),(2,5),(4,1),(4,3),(4,5)]
Prelude > map ($3) $ map (*) [1..10] -- La “tabla” del 3
[3,6,9,12,15,18,21,24,27,30]
Prelude > [ map ($x) $ map (*) [1..10] | x <-[2..9] ] --Las “tablas” del 2 al 9
[[2,4,6,8,10,12,14,16,18,20],[3,6,9,12,15,18,21,24,27,30],[4,8,12,16,20,24,28,32,36,40],
[5,10,15,20,25,30,35,40,45,50],[6,12,18,24,30,36,42,48,54,60],
[7,14,21,28,35,42,49,56,63,70],[8,16,24,32,40,48,56,64,72,80],
[9,18,27,36,45,54,63,72,81,90]]

Wednesday, October 23, 13
Pattern Matching
Prelude >
Prelude >
1
Prelude >
[2,3,4,5]
Prelude >
Prelude >
2
Prelude >
Prelude >
5
Prelude >
Prelude >
“hola”

let (x:xs) = [1..5]
x
xs
let (x:y:xs) = [1..5]
y
let Just x = Just 5
x
let (a,b,c) = (3,"hola",[1,2,3])
b

Wednesday, October 23, 13
Currying
Prelude > let sum x y z = x + y + z
Prelude > sum3 1 2 3
6
Prelude > :t sum
sum :: Num a => a -> a -> a -> a
Prelude > :t sum 1
sum 1 :: Num a => a -> a -> a
Prelude > :t sum 1 2
sum 1 2 :: Num a => a -> a
Prelude > let sum2and3 = sum 2 3
Prelude > sum2and3 5
10
Prelude > sum 2 4 $ 5
11

Wednesday, October 23, 13
Composición de Funciones
Prelude > let foo = (*2).(+5)
Prelude > :t foo
foo :: Integer -> Integer
Prelude > foo 4
18
Prelude >
Prelude >
Prelude > let strToUpper = map toUpper
Prelude > let strToLower = map toLower
Prelude > map ($ "WaZoWzky") $ map ((reverse).) [strToUpper, strToLower]
["YKZWOZAW","ykzwozaw"]

Wednesday, October 23, 13
Evaluación Perezosa
Ejemplo: El triángulo de Pascal

Wednesday, October 23, 13
Algebraic Data Types

Prelude > data Toy = Buzz | Woody | Rex | Hamm deriving (Eq, Ord, Show)
Prelude > let x = Rex
Prelude > x
Rex
Prelude > data Maybe a = Nothing | Just a
Prelude > :t Just 5
Just 5 :: Num a => Maybe a

Wednesday, October 23, 13
Algebraic Data Types
type Radius = Float
type Side = Float
type Vertex = (Float, Float)
data Shape = Rectangle Side Side |
! ! !
Ellipse Radius Radius |
! ! !
RtTriangle Side Side |
Polygon [Vertex]
deriving Show

Wednesday, October 23, 13
Algebraic Data Types
data Car = Car { company :: String  
               , model :: String  
               , year :: Int  
               } deriving (Show)
Prelude > let stang = Car {company="Ford", model="Mustang", year=1967}
Prelude > company stang
"Ford"
Prelude > year stang
1967

Wednesday, October 23, 13
Evaluación Perezosa

Solución:
pascal n = take n $
iterate (r -> zipWith (+) ([0] ++ r) (r ++ [0])) [1]

Wednesday, October 23, 13
¿Por qué aprender
Haskell?

Wednesday, October 23, 13
¿Por qué aprender Haskell?
"My personal reason for using Haskell is that I
have found that I write more bug-free code in
less time using Haskell than any other language.
I also find it very readable and extensible."
- Hal Daumé III

Wednesday, October 23, 13
¿Por qué aprender Haskell?
"Learning Haskell may not get you a job
programming in Haskell, but as Paul Graham
postulates, it may still get you a job. Personally, I
find that irrelevant. Learning the language has
proven to be fun and rewarding and I plan to
continue my Haskell adventures into 2012”
- Sean Voisen

Wednesday, October 23, 13
¿Por qué aprender Haskell?

Wednesday, October 23, 13
¿Por qué aprender Haskell?

• Incorpora conceptos de programación de un nivel
de abstracción superior a los existentes en otros
lenguajes.

Wednesday, October 23, 13
¿Por qué aprender Haskell?

• Incorpora conceptos de programación de un nivel
de abstracción superior a los existentes en otros
lenguajes.
Mayor abstracción => Mayor poder

Wednesday, October 23, 13
¿Por qué aprender Haskell?

• Incorpora conceptos de programación de un nivel
de abstracción superior a los existentes en otros
lenguajes.
Mayor abstracción => Mayor poder

• Los conceptos y estilo de programación aprendidos,
son aplicables a otros lenguajes y tecnologías.

Wednesday, October 23, 13
¿Por qué aprender Haskell?

• Incorpora conceptos de programación de un nivel
de abstracción superior a los existentes en otros
lenguajes.
Mayor abstracción => Mayor poder

• Los conceptos y estilo de programación aprendidos,
son aplicables a otros lenguajes y tecnologías.
Te convierte en mejor programador

Wednesday, October 23, 13
¿Por qué aprender Haskell?

• Incorpora conceptos de programación de un nivel
de abstracción superior a los existentes en otros
lenguajes.
Mayor abstracción => Mayor poder

• Los conceptos y estilo de programación aprendidos,
son aplicables a otros lenguajes y tecnologías.
Te convierte en mejor programador

• Es una plataforma madura para el desarrollo de
aplicaciones en el mundo real.

Wednesday, October 23, 13
¿Por qué aprender Haskell?

Wednesday, October 23, 13
¿Por qué aprender Haskell?

• Presenciar la evolución de un lenguaje/plataforma
ya madura y estable, pero con un ritmo de
crecimiento muy interesante.

Wednesday, October 23, 13
¿Por qué aprender Haskell?

• Presenciar la evolución de un lenguaje/plataforma
ya madura y estable, pero con un ritmo de
crecimiento muy interesante.

• La comunidad es muy dinámica y presta ayuda.

Wednesday, October 23, 13
Porque...

Wednesday, October 23, 13

#SoyPunk
Para saber más... (1/3)

Wednesday, October 23, 13
Para saber más... (1/3)

Wednesday, October 23, 13
Para saber más... (1/3)

Wednesday, October 23, 13
Para saber más... (2/3)

Wednesday, October 23, 13
Para saber más... (3/3)

• http://tryhaskell.org/
Tutorial interactivo en línea

• http://www.haskell.org
Sitio oficial de Haskell

• http://j.mp/1cMCJr5
Yet Another Haskell Tutorial

Wednesday, October 23, 13
Para saber más...

Wednesday, October 23, 13
Para saber más...

Wednesday, October 23, 13
Para saber más...
@Lambda_Mx

Wednesday, October 23, 13
Para saber más...
@Lambda_Mx
Grupo de Interés en Programación Funcional

Wednesday, October 23, 13
Para saber más...
@Lambda_Mx
Grupo de Interés en Programación Funcional
en México, D.F.

Wednesday, October 23, 13
Para saber más...
@Lambda_Mx
Grupo de Interés en Programación Funcional
en México, D.F.

Wednesday, October 23, 13
Para saber más...
@Lambda_Mx
Grupo de Interés en Programación Funcional
en México, D.F.
#HaskellDojoMx

Wednesday, October 23, 13
Para saber más...
@Lambda_Mx
Grupo de Interés en Programación Funcional
en México, D.F.
#HaskellDojoMx
Reunión quincenal para practicar Haskell

Wednesday, October 23, 13
Para saber más...
@Lambda_Mx
Grupo de Interés en Programación Funcional
en México, D.F.
#HaskellDojoMx
Reunión quincenal para practicar Haskell
y platicar sobre Programación Funcional

Wednesday, October 23, 13
Para saber más...
@Lambda_Mx
Grupo de Interés en Programación Funcional
en México, D.F.
#HaskellDojoMx
Reunión quincenal para practicar Haskell
y platicar sobre Programación Funcional

Wednesday, October 23, 13
Para saber más...
@Lambda_Mx
Grupo de Interés en Programación Funcional
en México, D.F.
#HaskellDojoMx
Reunión quincenal para practicar Haskell
y platicar sobre Programación Funcional

Wednesday, October 23, 13
Para saber más...
@Lambda_Mx
Grupo de Interés en Programación Funcional
en México, D.F.
#HaskellDojoMx
Reunión quincenal para practicar Haskell
y platicar sobre Programación Funcional

Wednesday, October 23, 13
¿Preguntas?

Wednesday, October 23, 13
¡Gracias!

Agustín Ramos Fonseca
@MachinesAreUs
Wednesday, October 23, 13

Más contenido relacionado

La actualidad más candente

Direccionamiento ip y subredes
Direccionamiento ip y subredesDireccionamiento ip y subredes
Direccionamiento ip y subredes
iuzeth Sabillon
 
Unidad 1 IntroduccióN A Las Bases De Datos
Unidad 1 IntroduccióN A Las Bases De DatosUnidad 1 IntroduccióN A Las Bases De Datos
Unidad 1 IntroduccióN A Las Bases De Datos
Sergio Sanchez
 
Internet ud3 - direccionamiento ip
Internet   ud3 - direccionamiento ipInternet   ud3 - direccionamiento ip
Internet ud3 - direccionamiento ip
Ivan Segura
 
Decompilador y metacompilador
Decompilador y metacompiladorDecompilador y metacompilador
Decompilador y metacompilador
MARCO POLO SILVA SEGOVIA
 
Tipos de sistemas distribuidos.
Tipos de sistemas distribuidos.Tipos de sistemas distribuidos.
Tipos de sistemas distribuidos.
Universidad de Guadalajara
 
Ejercicio de subneteo vlsm y cidr
Ejercicio de subneteo vlsm y cidrEjercicio de subneteo vlsm y cidr
Ejercicio de subneteo vlsm y cidrcesartg65
 
Clouding
CloudingClouding
Cuadro comparativo Grupal de IPv4 e IPv6.
Cuadro comparativo  Grupal de IPv4 e  IPv6.Cuadro comparativo  Grupal de IPv4 e  IPv6.
Cuadro comparativo Grupal de IPv4 e IPv6.
Elia Archibold
 
Protocolos de enrutamiento por vector distancia
Protocolos de enrutamiento por vector distanciaProtocolos de enrutamiento por vector distancia
Protocolos de enrutamiento por vector distancia
Jorge Arroyo
 
Ejercicio parciall 2
Ejercicio parciall 2Ejercicio parciall 2
Ejercicio parciall 2
Rodrigo Rodriguez
 
Capa de transporte
Capa de transporteCapa de transporte
Capa de transporte
laura1352
 
Dns caracteristicas-y-propiedades
Dns caracteristicas-y-propiedadesDns caracteristicas-y-propiedades
Sistemas Distribuidos basados en la Web
Sistemas Distribuidos basados en la WebSistemas Distribuidos basados en la Web
Sistemas Distribuidos basados en la Web
Tensor
 
DNS
DNSDNS
DNS
willmer
 
Protocolo http
Protocolo httpProtocolo http
Protocolo http
mateomamis
 
Ley de amdahl
Ley de amdahlLey de amdahl
Bases de Datos NoSQL - Riak
Bases de Datos NoSQL - Riak Bases de Datos NoSQL - Riak
Bases de Datos NoSQL - Riak
Andrei Amador
 
Segmentacion de memoria
Segmentacion de memoriaSegmentacion de memoria
Segmentacion de memoria
Adotbdotz Sokawati
 
Capa de aplicacion
Capa de aplicacionCapa de aplicacion
Capa de aplicacion
Fer Gilces
 
Ud2 hoja1 correccion
Ud2 hoja1 correccionUd2 hoja1 correccion
Ud2 hoja1 correccion
Angelica Fernandez
 

La actualidad más candente (20)

Direccionamiento ip y subredes
Direccionamiento ip y subredesDireccionamiento ip y subredes
Direccionamiento ip y subredes
 
Unidad 1 IntroduccióN A Las Bases De Datos
Unidad 1 IntroduccióN A Las Bases De DatosUnidad 1 IntroduccióN A Las Bases De Datos
Unidad 1 IntroduccióN A Las Bases De Datos
 
Internet ud3 - direccionamiento ip
Internet   ud3 - direccionamiento ipInternet   ud3 - direccionamiento ip
Internet ud3 - direccionamiento ip
 
Decompilador y metacompilador
Decompilador y metacompiladorDecompilador y metacompilador
Decompilador y metacompilador
 
Tipos de sistemas distribuidos.
Tipos de sistemas distribuidos.Tipos de sistemas distribuidos.
Tipos de sistemas distribuidos.
 
Ejercicio de subneteo vlsm y cidr
Ejercicio de subneteo vlsm y cidrEjercicio de subneteo vlsm y cidr
Ejercicio de subneteo vlsm y cidr
 
Clouding
CloudingClouding
Clouding
 
Cuadro comparativo Grupal de IPv4 e IPv6.
Cuadro comparativo  Grupal de IPv4 e  IPv6.Cuadro comparativo  Grupal de IPv4 e  IPv6.
Cuadro comparativo Grupal de IPv4 e IPv6.
 
Protocolos de enrutamiento por vector distancia
Protocolos de enrutamiento por vector distanciaProtocolos de enrutamiento por vector distancia
Protocolos de enrutamiento por vector distancia
 
Ejercicio parciall 2
Ejercicio parciall 2Ejercicio parciall 2
Ejercicio parciall 2
 
Capa de transporte
Capa de transporteCapa de transporte
Capa de transporte
 
Dns caracteristicas-y-propiedades
Dns caracteristicas-y-propiedadesDns caracteristicas-y-propiedades
Dns caracteristicas-y-propiedades
 
Sistemas Distribuidos basados en la Web
Sistemas Distribuidos basados en la WebSistemas Distribuidos basados en la Web
Sistemas Distribuidos basados en la Web
 
DNS
DNSDNS
DNS
 
Protocolo http
Protocolo httpProtocolo http
Protocolo http
 
Ley de amdahl
Ley de amdahlLey de amdahl
Ley de amdahl
 
Bases de Datos NoSQL - Riak
Bases de Datos NoSQL - Riak Bases de Datos NoSQL - Riak
Bases de Datos NoSQL - Riak
 
Segmentacion de memoria
Segmentacion de memoriaSegmentacion de memoria
Segmentacion de memoria
 
Capa de aplicacion
Capa de aplicacionCapa de aplicacion
Capa de aplicacion
 
Ud2 hoja1 correccion
Ud2 hoja1 correccionUd2 hoja1 correccion
Ud2 hoja1 correccion
 

Destacado

I1M2011-T4: Definición de funciones en Haskell
I1M2011-T4: Definición de funciones en HaskellI1M2011-T4: Definición de funciones en Haskell
I1M2011-T4: Definición de funciones en Haskell
José A. Alonso
 
Intro haskell
Intro haskellIntro haskell
Haskell
HaskellHaskell
Haskell
Axel Torvals
 
Programación funcional
Programación funcionalProgramación funcional
Programación funcional
Damián Rotta
 
Programación funcional con haskell
Programación funcional con haskellProgramación funcional con haskell
Programación funcional con haskell
Agustin Ramos
 
Yesod Framework
Yesod FrameworkYesod Framework
Yesod Framework
Rocio Amaya
 
Haskell wikipedia
Haskell wikipediaHaskell wikipedia
Haskell wikipedia
Hofexfoq
 
Tipos de memoria.
Tipos de memoria.Tipos de memoria.
Tipos de memoria.
camilo199
 
Bt haskell-1
Bt haskell-1Bt haskell-1
Bt haskell-1
Rosana Alvarez
 
Original Curry
Original CurryOriginal Curry
Original Curry
PATISELE
 
Tipos De Datos Lisp
Tipos De Datos LispTipos De Datos Lisp
Tipos De Datos Lisp
yamies
 
Tipos de lenguaje de programacion part 1
Tipos de lenguaje de programacion part 1Tipos de lenguaje de programacion part 1
Tipos de lenguaje de programacion part 1
Ernes 28
 
Tipos de programacion
Tipos de programacionTipos de programacion
Tipos de programacion
morenovenezolano
 
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.
José A. Alonso
 
Tema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en HaskellTema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en Haskell
José A. Alonso
 
2.1 elemento básicos del lenguaje de programación estructurado manipulación b...
2.1 elemento básicos del lenguaje de programación estructurado manipulación b...2.1 elemento básicos del lenguaje de programación estructurado manipulación b...
2.1 elemento básicos del lenguaje de programación estructurado manipulación b...
carolina peña
 
Programación estructurada presentación
Programación estructurada presentaciónProgramación estructurada presentación
Programación estructurada presentación
Ivarra
 
Importancia De La ProgramacióN Estructurada
Importancia De La ProgramacióN EstructuradaImportancia De La ProgramacióN Estructurada
Importancia De La ProgramacióN Estructurada
Marvin Romero
 
Tema 6: Definiciones por recursión en Haskell
Tema 6: Definiciones por recursión en Haskell Tema 6: Definiciones por recursión en Haskell
Tema 6: Definiciones por recursión en Haskell
José A. Alonso
 
PARADIGMA FUNCIONAL
PARADIGMA FUNCIONALPARADIGMA FUNCIONAL
PARADIGMA FUNCIONAL
Fredy Olaya
 

Destacado (20)

I1M2011-T4: Definición de funciones en Haskell
I1M2011-T4: Definición de funciones en HaskellI1M2011-T4: Definición de funciones en Haskell
I1M2011-T4: Definición de funciones en Haskell
 
Intro haskell
Intro haskellIntro haskell
Intro haskell
 
Haskell
HaskellHaskell
Haskell
 
Programación funcional
Programación funcionalProgramación funcional
Programación funcional
 
Programación funcional con haskell
Programación funcional con haskellProgramación funcional con haskell
Programación funcional con haskell
 
Yesod Framework
Yesod FrameworkYesod Framework
Yesod Framework
 
Haskell wikipedia
Haskell wikipediaHaskell wikipedia
Haskell wikipedia
 
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
 
Tipos De Datos Lisp
Tipos De Datos LispTipos De Datos Lisp
Tipos De Datos Lisp
 
Tipos de lenguaje de programacion part 1
Tipos de lenguaje de programacion part 1Tipos de lenguaje de programacion part 1
Tipos de lenguaje de programacion part 1
 
Tipos de programacion
Tipos de programacionTipos de programacion
Tipos de programacion
 
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.
 
Tema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en HaskellTema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en Haskell
 
2.1 elemento básicos del lenguaje de programación estructurado manipulación b...
2.1 elemento básicos del lenguaje de programación estructurado manipulación b...2.1 elemento básicos del lenguaje de programación estructurado manipulación b...
2.1 elemento básicos del lenguaje de programación estructurado manipulación b...
 
Programación estructurada presentación
Programación estructurada presentaciónProgramación estructurada presentación
Programación estructurada presentación
 
Importancia De La ProgramacióN Estructurada
Importancia De La ProgramacióN EstructuradaImportancia De La ProgramacióN Estructurada
Importancia De La ProgramacióN Estructurada
 
Tema 6: Definiciones por recursión en Haskell
Tema 6: Definiciones por recursión en Haskell Tema 6: Definiciones por recursión en Haskell
Tema 6: Definiciones por recursión en Haskell
 
PARADIGMA FUNCIONAL
PARADIGMA FUNCIONALPARADIGMA FUNCIONAL
PARADIGMA FUNCIONAL
 

Más de Software Guru

Hola Mundo del Internet de las Cosas
Hola Mundo del Internet de las CosasHola Mundo del Internet de las Cosas
Hola Mundo del Internet de las Cosas
Software Guru
 
Estructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso realesEstructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso reales
Software Guru
 
Building bias-aware environments
Building bias-aware environmentsBuilding bias-aware environments
Building bias-aware environments
Software Guru
 
El secreto para ser un desarrollador Senior
El secreto para ser un desarrollador SeniorEl secreto para ser un desarrollador Senior
El secreto para ser un desarrollador Senior
Software Guru
 
Cómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto idealCómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto ideal
Software Guru
 
Automatizando ideas con Apache Airflow
Automatizando ideas con Apache AirflowAutomatizando ideas con Apache Airflow
Automatizando ideas con Apache Airflow
Software Guru
 
How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:
Software Guru
 
Introducción al machine learning
Introducción al machine learningIntroducción al machine learning
Introducción al machine learning
Software Guru
 
Democratizando el uso de CoDi
Democratizando el uso de CoDiDemocratizando el uso de CoDi
Democratizando el uso de CoDi
Software Guru
 
Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0
Software Guru
 
Taller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJSTaller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJS
Software Guru
 
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
Software Guru
 
¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?
Software Guru
 
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Software Guru
 
Pruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsPruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOps
Software Guru
 
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivosElixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
Software Guru
 
Así publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stressAsí publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stress
Software Guru
 
Achieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goalsAchieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goals
Software Guru
 
Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19
Software Guru
 
De lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseñoDe lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseño
Software Guru
 

Más de Software Guru (20)

Hola Mundo del Internet de las Cosas
Hola Mundo del Internet de las CosasHola Mundo del Internet de las Cosas
Hola Mundo del Internet de las Cosas
 
Estructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso realesEstructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso reales
 
Building bias-aware environments
Building bias-aware environmentsBuilding bias-aware environments
Building bias-aware environments
 
El secreto para ser un desarrollador Senior
El secreto para ser un desarrollador SeniorEl secreto para ser un desarrollador Senior
El secreto para ser un desarrollador Senior
 
Cómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto idealCómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto ideal
 
Automatizando ideas con Apache Airflow
Automatizando ideas con Apache AirflowAutomatizando ideas con Apache Airflow
Automatizando ideas con Apache Airflow
 
How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:
 
Introducción al machine learning
Introducción al machine learningIntroducción al machine learning
Introducción al machine learning
 
Democratizando el uso de CoDi
Democratizando el uso de CoDiDemocratizando el uso de CoDi
Democratizando el uso de CoDi
 
Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0
 
Taller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJSTaller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJS
 
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
 
¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?
 
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
 
Pruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsPruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOps
 
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivosElixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
 
Así publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stressAsí publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stress
 
Achieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goalsAchieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goals
 
Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19
 
De lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseñoDe lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseño
 

Último

REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANOREVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
gisellearanguren1
 
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdfPLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
70244530
 
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
AbrahamCastillo42
 
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDADEXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
AngelCristhianMB
 
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
codesiret
 
625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf
yuberpalma
 
Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....
Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....
Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....
MiguelAtencio10
 
La Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docxLa Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docx
luiscohailatenazoa0
 
INFORMATICA Y TECNOLOGIA
INFORMATICA Y TECNOLOGIAINFORMATICA Y TECNOLOGIA
INFORMATICA Y TECNOLOGIA
renzocruz180310
 
Second Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro TapiaSecond Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro Tapia
al050121024
 
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
AMADO SALVADOR
 
Nuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsadNuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsad
larapalaciosmonzon28
 
Refrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y ForzadoRefrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y Forzado
NicandroMartinez2
 
Flows: Mejores Prácticas y Nuevos Features
Flows: Mejores Prácticas y Nuevos FeaturesFlows: Mejores Prácticas y Nuevos Features
Flows: Mejores Prácticas y Nuevos Features
Paola De la Torre
 
Presentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre bloggerPresentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre blogger
larapalaciosmonzon28
 
Manual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputoManual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputo
doctorsoluciones34
 
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdf
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdfPresentación Seguridad Digital Profesional Azul Oscuro (1).pdf
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdf
giampierdiaz5
 
Modo test refrigeradores y codigos de errores 2018 V2.pdf
Modo test refrigeradores y codigos de errores 2018 V2.pdfModo test refrigeradores y codigos de errores 2018 V2.pdf
Modo test refrigeradores y codigos de errores 2018 V2.pdf
ranierglez
 
El uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptxEl uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptx
jgvanessa23
 
Manual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputosManual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputos
cbtechchihuahua
 

Último (20)

REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANOREVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
 
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdfPLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
 
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
 
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDADEXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
 
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
 
625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf
 
Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....
Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....
Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....
 
La Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docxLa Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docx
 
INFORMATICA Y TECNOLOGIA
INFORMATICA Y TECNOLOGIAINFORMATICA Y TECNOLOGIA
INFORMATICA Y TECNOLOGIA
 
Second Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro TapiaSecond Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro Tapia
 
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
 
Nuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsadNuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsad
 
Refrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y ForzadoRefrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y Forzado
 
Flows: Mejores Prácticas y Nuevos Features
Flows: Mejores Prácticas y Nuevos FeaturesFlows: Mejores Prácticas y Nuevos Features
Flows: Mejores Prácticas y Nuevos Features
 
Presentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre bloggerPresentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre blogger
 
Manual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputoManual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputo
 
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdf
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdfPresentación Seguridad Digital Profesional Azul Oscuro (1).pdf
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdf
 
Modo test refrigeradores y codigos de errores 2018 V2.pdf
Modo test refrigeradores y codigos de errores 2018 V2.pdfModo test refrigeradores y codigos de errores 2018 V2.pdf
Modo test refrigeradores y codigos de errores 2018 V2.pdf
 
El uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptxEl uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptx
 
Manual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputosManual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputos
 

Programación funcional con haskell

  • 1. Programación Funcional en Haskell Agustín Ramos Fonseca #sgvirtual Wednesday, October 23, 13
  • 4. Un lenguaje de programación... Wednesday, October 23, 13
  • 5. Un lenguaje de programación... • Funcional. Wednesday, October 23, 13
  • 6. Un lenguaje de programación... • Funcional. Las funciones son construcciones de primera clase. Wednesday, October 23, 13
  • 7. Un lenguaje de programación... • Funcional. Las funciones son construcciones de primera clase. • Puro. Wednesday, October 23, 13
  • 8. Un lenguaje de programación... • Funcional. Las funciones son construcciones de primera clase. • Puro. Las funciones no tienen efectos colaterales. Wednesday, October 23, 13
  • 9. Un lenguaje de programación... • Funcional. Las funciones son construcciones de primera clase. • Puro. Las funciones no tienen efectos colaterales. • De evaluación perezosa. Wednesday, October 23, 13
  • 10. Un lenguaje de programación... • Funcional. Las funciones son construcciones de primera clase. • Puro. Las funciones no tienen efectos colaterales. • De evaluación perezosa. Las expresiones se evalúan hasta que es requerido. Wednesday, October 23, 13
  • 11. Un lenguaje de programación... • Funcional. Las funciones son construcciones de primera clase. • Puro. Las funciones no tienen efectos colaterales. • De evaluación perezosa. Las expresiones se evalúan hasta que es requerido. • De tipado estático. Wednesday, October 23, 13
  • 12. Un lenguaje de programación... • Funcional. Las funciones son construcciones de primera clase. • Puro. Las funciones no tienen efectos colaterales. • De evaluación perezosa. Las expresiones se evalúan hasta que es requerido. • De tipado estático. Con inferencia de tipos. Wednesday, October 23, 13
  • 13. Un poco de Historia Wednesday, October 23, 13
  • 14. Un poco de Historia LISP (John McCarthy) 1958 Wednesday, October 23, 13
  • 15. Un poco de Historia LISP (John McCarthy) 1958 Wednesday, October 23, 13 ML y Hope 1970’s
  • 16. Un poco de Historia LISP (John McCarthy) 1958 Wednesday, October 23, 13 ML y Hope 1970’s 1985
  • 17. Un poco de Historia LISP (John McCarthy) 1958 ML y Hope 1970’s 1985 FPCA '87 Wednesday, October 23, 13
  • 18. Un poco de Historia LISP (John McCarthy) 1958 ML y Hope 1970’s 1985 FPCA '87 ¡Necesitamos Haskell! Wednesday, October 23, 13
  • 19. Un poco de Historia LISP (John McCarthy) 1958 ML y Hope 1970’s Haskell 1.0 1985 1990 FPCA '87 ¡Necesitamos Haskell! Wednesday, October 23, 13
  • 20. Un poco de Historia LISP (John McCarthy) 1958 ML y Hope Haskell 1.0 Haskell ’98 1970’s 1985 1990 1998 FPCA '87 ¡Necesitamos Haskell! Wednesday, October 23, 13
  • 21. Un poco de Historia LISP (John McCarthy) 1958 Haskell ’98 Revised Report ML y Hope Haskell 1.0 Haskell ’98 1970’s 1985 1990 1998 2003 FPCA '87 ¡Necesitamos Haskell! Wednesday, October 23, 13
  • 22. Un poco de Historia LISP (John McCarthy) 1958 Haskell ’98 Revised Report ML y Hope Haskell 1.0 Haskell ’98 1970’s 1985 1990 1998 2003 Haskell 2010 2010 FPCA '87 ¡Necesitamos Haskell! Wednesday, October 23, 13
  • 23. Motivación de los Sistemas de Tipado Estático import foo def bar(baz, quux): x = baz.do_something() y = quux.do_something_else() return x + y Wednesday, October 23, 13
  • 24. Motivación de los Sistemas de Tipado Estático # Los imports pueden tener efectos colaterales, # como escribir en un archivo... o lanzar un misil. import foo def bar(baz, quux): # baz puede ser cualquier objeto # y podría no tener el método do_something() x = baz.do_something() # quux puede ser cualquier objeto y podría # no ser capaz de ejecutaro do_something_else() y = quux.do_something_else() # El operador ‘+’ podría estar sobrecargado y # hacer algo impredecible o simplemente fallar. return x + y Wednesday, October 23, 13
  • 25. Características • • • • • • • • • List comprehensions. Pattern matching. Currying Composición de funciones. Infinite data structures. Agebraic Data Types Type classes. Applicative Functors Monads Wednesday, October 23, 13
  • 27. Tipos Prelude > :t 2 2 :: Num a => a Prelude > :t [1,2,3] [1,2,3] :: Num t => [t] Prelude > :t ["hola","mundo"] ["hola","mundo"] :: [[Char]] Prelude > :t head head :: [a] -> a Prelude > :t [even,odd] [even,odd] :: Integral a => [a -> Bool] Wednesday, October 23, 13
  • 28. Listas Lista de Num [1,2,3,4,5] Lista (rango) de Char [‘a’..’z’] Lista de strings [Char] [“hola”,”mundo”] Wednesday, October 23, 13
  • 29. Funciones sobre listas (1/2) Prelude > head [1,2,3,4,5] 1 Prelude > tail [1..5] [2,3,4,5] Prelude > [1..5] !! 3 4 Prelude > take 2 [1..5] [1,2] Prelude > filter even [1..5] [2,4] Wednesday, October 23, 13
  • 30. Funciones sobre listas (2/2) Prelude > map (x -> x*x) [1..5] [1,4,9,16,25] Prelude > zip [1..5] ['a'..'e'] [(1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e')] Prelude > zipWith (x y -> x + y) [1..5] [11..15] [12,14,16,18,20] Prelude > zipWith (+) [1..5] [11..15] [12,14,16,18,20] Prelude > foldl (+) 0 [1..5] 15 Wednesday, October 23, 13
  • 31. Funciones Area de un círculo circleArea r = pi * r^ 0 Secuencia de Fibonacci fib 0 = 0 fib 1 = 1 fib n = fib (n-1) + fib (n-2) Wednesday, October 23, 13
  • 32. Funciones QuickSort quicksort :: Ord a => [a] -> [a] quicksort [] = [] quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater) where lesser = filter (< p) xs greater = filter (>= p) xs Wednesday, October 23, 13
  • 33. Funciones Prelude 3 Prelude 3 Prelude 6 Prelude 2 Prelude 2 Prelude True Prelude True >1+2 > (+) 1 2 > (*) 2 3 > div 10 5 > 10 `div` 5 > ($) even 4 > even $ 4 Wednesday, October 23, 13
  • 34. List comprehensions Prelude > [ x | x <- [1..10] , even x ] [2,4,6,8,10] Prelude > [ (x,y) | x <- [1..5], y <- [1..5] , even x, odd y ] [(2,1),(2,3),(2,5),(4,1),(4,3),(4,5)] Prelude > map ($3) $ map (*) [1..10] -- La “tabla” del 3 [3,6,9,12,15,18,21,24,27,30] Prelude > [ map ($x) $ map (*) [1..10] | x <-[2..9] ] --Las “tablas” del 2 al 9 [[2,4,6,8,10,12,14,16,18,20],[3,6,9,12,15,18,21,24,27,30],[4,8,12,16,20,24,28,32,36,40], [5,10,15,20,25,30,35,40,45,50],[6,12,18,24,30,36,42,48,54,60], [7,14,21,28,35,42,49,56,63,70],[8,16,24,32,40,48,56,64,72,80], [9,18,27,36,45,54,63,72,81,90]] Wednesday, October 23, 13
  • 35. Pattern Matching Prelude > Prelude > 1 Prelude > [2,3,4,5] Prelude > Prelude > 2 Prelude > Prelude > 5 Prelude > Prelude > “hola” let (x:xs) = [1..5] x xs let (x:y:xs) = [1..5] y let Just x = Just 5 x let (a,b,c) = (3,"hola",[1,2,3]) b Wednesday, October 23, 13
  • 36. Currying Prelude > let sum x y z = x + y + z Prelude > sum3 1 2 3 6 Prelude > :t sum sum :: Num a => a -> a -> a -> a Prelude > :t sum 1 sum 1 :: Num a => a -> a -> a Prelude > :t sum 1 2 sum 1 2 :: Num a => a -> a Prelude > let sum2and3 = sum 2 3 Prelude > sum2and3 5 10 Prelude > sum 2 4 $ 5 11 Wednesday, October 23, 13
  • 37. Composición de Funciones Prelude > let foo = (*2).(+5) Prelude > :t foo foo :: Integer -> Integer Prelude > foo 4 18 Prelude > Prelude > Prelude > let strToUpper = map toUpper Prelude > let strToLower = map toLower Prelude > map ($ "WaZoWzky") $ map ((reverse).) [strToUpper, strToLower] ["YKZWOZAW","ykzwozaw"] Wednesday, October 23, 13
  • 38. Evaluación Perezosa Ejemplo: El triángulo de Pascal Wednesday, October 23, 13
  • 39. Algebraic Data Types Prelude > data Toy = Buzz | Woody | Rex | Hamm deriving (Eq, Ord, Show) Prelude > let x = Rex Prelude > x Rex Prelude > data Maybe a = Nothing | Just a Prelude > :t Just 5 Just 5 :: Num a => Maybe a Wednesday, October 23, 13
  • 40. Algebraic Data Types type Radius = Float type Side = Float type Vertex = (Float, Float) data Shape = Rectangle Side Side | ! ! ! Ellipse Radius Radius | ! ! ! RtTriangle Side Side | Polygon [Vertex] deriving Show Wednesday, October 23, 13
  • 42. Evaluación Perezosa Solución: pascal n = take n $ iterate (r -> zipWith (+) ([0] ++ r) (r ++ [0])) [1] Wednesday, October 23, 13
  • 44. ¿Por qué aprender Haskell? "My personal reason for using Haskell is that I have found that I write more bug-free code in less time using Haskell than any other language. I also find it very readable and extensible." - Hal Daumé III Wednesday, October 23, 13
  • 45. ¿Por qué aprender Haskell? "Learning Haskell may not get you a job programming in Haskell, but as Paul Graham postulates, it may still get you a job. Personally, I find that irrelevant. Learning the language has proven to be fun and rewarding and I plan to continue my Haskell adventures into 2012” - Sean Voisen Wednesday, October 23, 13
  • 46. ¿Por qué aprender Haskell? Wednesday, October 23, 13
  • 47. ¿Por qué aprender Haskell? • Incorpora conceptos de programación de un nivel de abstracción superior a los existentes en otros lenguajes. Wednesday, October 23, 13
  • 48. ¿Por qué aprender Haskell? • Incorpora conceptos de programación de un nivel de abstracción superior a los existentes en otros lenguajes. Mayor abstracción => Mayor poder Wednesday, October 23, 13
  • 49. ¿Por qué aprender Haskell? • Incorpora conceptos de programación de un nivel de abstracción superior a los existentes en otros lenguajes. Mayor abstracción => Mayor poder • Los conceptos y estilo de programación aprendidos, son aplicables a otros lenguajes y tecnologías. Wednesday, October 23, 13
  • 50. ¿Por qué aprender Haskell? • Incorpora conceptos de programación de un nivel de abstracción superior a los existentes en otros lenguajes. Mayor abstracción => Mayor poder • Los conceptos y estilo de programación aprendidos, son aplicables a otros lenguajes y tecnologías. Te convierte en mejor programador Wednesday, October 23, 13
  • 51. ¿Por qué aprender Haskell? • Incorpora conceptos de programación de un nivel de abstracción superior a los existentes en otros lenguajes. Mayor abstracción => Mayor poder • Los conceptos y estilo de programación aprendidos, son aplicables a otros lenguajes y tecnologías. Te convierte en mejor programador • Es una plataforma madura para el desarrollo de aplicaciones en el mundo real. Wednesday, October 23, 13
  • 52. ¿Por qué aprender Haskell? Wednesday, October 23, 13
  • 53. ¿Por qué aprender Haskell? • Presenciar la evolución de un lenguaje/plataforma ya madura y estable, pero con un ritmo de crecimiento muy interesante. Wednesday, October 23, 13
  • 54. ¿Por qué aprender Haskell? • Presenciar la evolución de un lenguaje/plataforma ya madura y estable, pero con un ritmo de crecimiento muy interesante. • La comunidad es muy dinámica y presta ayuda. Wednesday, October 23, 13
  • 56. Para saber más... (1/3) Wednesday, October 23, 13
  • 57. Para saber más... (1/3) Wednesday, October 23, 13
  • 58. Para saber más... (1/3) Wednesday, October 23, 13
  • 59. Para saber más... (2/3) Wednesday, October 23, 13
  • 60. Para saber más... (3/3) • http://tryhaskell.org/ Tutorial interactivo en línea • http://www.haskell.org Sitio oficial de Haskell • http://j.mp/1cMCJr5 Yet Another Haskell Tutorial Wednesday, October 23, 13
  • 64. Para saber más... @Lambda_Mx Grupo de Interés en Programación Funcional Wednesday, October 23, 13
  • 65. Para saber más... @Lambda_Mx Grupo de Interés en Programación Funcional en México, D.F. Wednesday, October 23, 13
  • 66. Para saber más... @Lambda_Mx Grupo de Interés en Programación Funcional en México, D.F. Wednesday, October 23, 13
  • 67. Para saber más... @Lambda_Mx Grupo de Interés en Programación Funcional en México, D.F. #HaskellDojoMx Wednesday, October 23, 13
  • 68. Para saber más... @Lambda_Mx Grupo de Interés en Programación Funcional en México, D.F. #HaskellDojoMx Reunión quincenal para practicar Haskell Wednesday, October 23, 13
  • 69. Para saber más... @Lambda_Mx Grupo de Interés en Programación Funcional en México, D.F. #HaskellDojoMx Reunión quincenal para practicar Haskell y platicar sobre Programación Funcional Wednesday, October 23, 13
  • 70. Para saber más... @Lambda_Mx Grupo de Interés en Programación Funcional en México, D.F. #HaskellDojoMx Reunión quincenal para practicar Haskell y platicar sobre Programación Funcional Wednesday, October 23, 13
  • 71. Para saber más... @Lambda_Mx Grupo de Interés en Programación Funcional en México, D.F. #HaskellDojoMx Reunión quincenal para practicar Haskell y platicar sobre Programación Funcional Wednesday, October 23, 13
  • 72. Para saber más... @Lambda_Mx Grupo de Interés en Programación Funcional en México, D.F. #HaskellDojoMx Reunión quincenal para practicar Haskell y platicar sobre Programación Funcional Wednesday, October 23, 13