SlideShare a Scribd company logo
1 of 74
Download to read offline
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

More Related Content

What's hot

Flujos y archivo en java
Flujos y archivo en javaFlujos y archivo en java
Flujos y archivo en javaBelen Gonzalez
 
Programación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructoresProgramación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructoresAlvaro Enrique Ruano
 
Computer graphics lab assignment
Computer graphics lab assignmentComputer graphics lab assignment
Computer graphics lab assignmentAbdullah Al Shiam
 
Tipos de gramatica y arboles de derivacion
Tipos de gramatica y arboles de derivacionTipos de gramatica y arboles de derivacion
Tipos de gramatica y arboles de derivacionjorge severino
 
Normalizaciòn
NormalizaciònNormalizaciòn
Normalizaciònomarzon
 
Cuadro comparativo de softwares de de metodos numericos
Cuadro comparativo de softwares de de metodos numericosCuadro comparativo de softwares de de metodos numericos
Cuadro comparativo de softwares de de metodos numericosJuanCarlos210997
 
Ejercicios resueltos de punteros 12a15
Ejercicios resueltos de punteros 12a15Ejercicios resueltos de punteros 12a15
Ejercicios resueltos de punteros 12a15rasave
 
Ejercicios resueltos de java
Ejercicios resueltos de javaEjercicios resueltos de java
Ejercicios resueltos de javaFaral TF
 
Listas como estructura de datos..
Listas como estructura de datos..Listas como estructura de datos..
Listas como estructura de datos..NANO-06
 
Interprete sencillo utilizando ply con python 3
Interprete sencillo utilizando ply con python 3Interprete sencillo utilizando ply con python 3
Interprete sencillo utilizando ply con python 3MAURICIOANDRES39
 
P. estructurada vs. programación orientada a objetos
P. estructurada vs. programación orientada a objetosP. estructurada vs. programación orientada a objetos
P. estructurada vs. programación orientada a objetosGeovanny Yungán
 
Notación infija postfija
Notación infija postfijaNotación infija postfija
Notación infija postfijaOmarzingm
 
Maquina de turing y resolubilidad e Irresolubilidad
Maquina de turing y resolubilidad e IrresolubilidadMaquina de turing y resolubilidad e Irresolubilidad
Maquina de turing y resolubilidad e Irresolubilidadlluis31
 

What's hot (20)

Flujos y archivo en java
Flujos y archivo en javaFlujos y archivo en java
Flujos y archivo en java
 
Programación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructoresProgramación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructores
 
Computer graphics lab assignment
Computer graphics lab assignmentComputer graphics lab assignment
Computer graphics lab assignment
 
Tipos de gramatica y arboles de derivacion
Tipos de gramatica y arboles de derivacionTipos de gramatica y arboles de derivacion
Tipos de gramatica y arboles de derivacion
 
Normalizaciòn
NormalizaciònNormalizaciòn
Normalizaciòn
 
Cuadro comparativo de softwares de de metodos numericos
Cuadro comparativo de softwares de de metodos numericosCuadro comparativo de softwares de de metodos numericos
Cuadro comparativo de softwares de de metodos numericos
 
Funciones y gráficas en matlab
Funciones y gráficas en matlabFunciones y gráficas en matlab
Funciones y gráficas en matlab
 
Prolog
Prolog Prolog
Prolog
 
Ejercicios resueltos de punteros 12a15
Ejercicios resueltos de punteros 12a15Ejercicios resueltos de punteros 12a15
Ejercicios resueltos de punteros 12a15
 
Ejercicios resueltos de java
Ejercicios resueltos de javaEjercicios resueltos de java
Ejercicios resueltos de java
 
Listas como estructura de datos..
Listas como estructura de datos..Listas como estructura de datos..
Listas como estructura de datos..
 
Interprete sencillo utilizando ply con python 3
Interprete sencillo utilizando ply con python 3Interprete sencillo utilizando ply con python 3
Interprete sencillo utilizando ply con python 3
 
Presentacion Python
Presentacion  Python Presentacion  Python
Presentacion Python
 
Pilas En C++
Pilas En C++Pilas En C++
Pilas En C++
 
Polimorfismo en Java
Polimorfismo en JavaPolimorfismo en Java
Polimorfismo en Java
 
P. estructurada vs. programación orientada a objetos
P. estructurada vs. programación orientada a objetosP. estructurada vs. programación orientada a objetos
P. estructurada vs. programación orientada a objetos
 
Automatas de pila
Automatas de pilaAutomatas de pila
Automatas de pila
 
Notación infija postfija
Notación infija postfijaNotación infija postfija
Notación infija postfija
 
Colas
ColasColas
Colas
 
Maquina de turing y resolubilidad e Irresolubilidad
Maquina de turing y resolubilidad e IrresolubilidadMaquina de turing y resolubilidad e Irresolubilidad
Maquina de turing y resolubilidad e Irresolubilidad
 

Viewers also liked

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 HaskellJosé A. Alonso
 
Programación funcional
Programación funcionalProgramación funcional
Programación funcionalDamián Rotta
 
Programación funcional con haskell
Programación funcional con haskellProgramación funcional con haskell
Programación funcional con haskellAgustin Ramos
 
Haskell wikipedia
Haskell wikipediaHaskell wikipedia
Haskell wikipediaHofexfoq
 
Tipos de memoria.
Tipos de memoria.Tipos de memoria.
Tipos de memoria.camilo199
 
Original Curry
Original CurryOriginal Curry
Original CurryPATISELE
 
Tipos De Datos Lisp
Tipos De Datos LispTipos De Datos Lisp
Tipos De Datos Lispyamies
 
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 1Ernes 28
 
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 HaskellJosé 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ónIvarra
 
Importancia De La ProgramacióN Estructurada
Importancia De La ProgramacióN EstructuradaImportancia De La ProgramacióN Estructurada
Importancia De La ProgramacióN EstructuradaMarvin 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 FUNCIONALFredy Olaya
 

Viewers also liked (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
 

More from 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 CosasSoftware 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 realesSoftware Guru
 
Building bias-aware environments
Building bias-aware environmentsBuilding bias-aware environments
Building bias-aware environmentsSoftware 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 SeniorSoftware 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 idealSoftware Guru
 
Automatizando ideas con Apache Airflow
Automatizando ideas con Apache AirflowAutomatizando ideas con Apache Airflow
Automatizando ideas con Apache AirflowSoftware 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 learningSoftware Guru
 
Democratizando el uso de CoDi
Democratizando el uso de CoDiDemocratizando el uso de CoDi
Democratizando el uso de CoDiSoftware 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.0Software 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 StencilJSSoftware 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 DevOpsSoftware 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 productivosSoftware 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 stressSoftware 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 goalsSoftware 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 Covid19Software 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ñoSoftware Guru
 

More from 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
 

Recently uploaded

Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 

Recently uploaded (10)

Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 

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