Haskell 
Intro
Functional Programming 
Estilo de programación donde lo principal es 
aplicar funciones (en el sentido matemático) 
sobre expresiones para obtener otras 
expresiones. 
f (x) y
Lenguajes 
Hay lenguajes funcionales, como Haskell, 
Clojure, Lisp. 
Hay lenguajes imperativos que soportan 
programación funcional, como Javascript, Java, 
Python, PHP.
Instalación de Haskell 
The Haskell Platform 
http://www.haskell.org
El lenguaje Haskell 
The Haskell Report 
https://www.haskell. 
org/onlinereport/haskell2010/
GHCI 
Glorious Haskell Compiler Interpreter 
$ ghci 
Prelude> 1 + 1 
Prelude> it 
Prelude> :type 1 
Prelude> :? 
Prelude> :quit
Scripts 
Es más cómodo escribir la definición de 
funciones en scripts. 
Los scripts se guardan en archivos .hs
Flujo de trabajo con scripts 
En un editor tener abierto myscript.hs 
$ ghci 
> :load myscript 
> -- jugar 
> :reload
Aplicación de funciones 
f(a,b) se expresa: f a b 
f(a,b) + cd se expresa: f a b + c * d 
f(g(x)) se expresa: f (g x)
Aritmética 
a + b 
a - b 
a * b 
a `div` b 
a `mod` b 
a / b 
a ^ b 
(+) a b 
(-) a b 
(*) a b 
div a b 
mod a b 
(/) a b 
(^) a b
Lógica 
True 
False 
not a 
a || b 
a && b 
(||) a b 
(&&) a b
Booleanos 
a == b 
a /= b 
a < b 
a > b 
a <= b 
a >= b 
(==) a b 
(/=) a b 
(<) a b 
(>) a b 
(<=) a b 
(>=) a b
Comentarios 
-- De una línea 
{- 
De múltiples líneas 
-}
Listas 
[] 
[1,2,3,4,5] 
[1..5]
Variables 
Comienzan con minúscula 
x: item 
xs: lista de items 
xss: lista de listas
Funciones 
doble x = x + x
Funciones 
suma [] = 0 
suma (x:xs) = x + suma xs
Funciones 
qsort [] = [] 
qsort (x:xs) = qsort smaller ++ [x] ++ qsort larger 
where 
smaller = [a|a<-xs, a <= x] 
larger = [a|a<-xs, a > x]
Listas 
algunas operaciones
as ++ bs 
1 2 ++ 3 4 5 
1 2 3 4 5
xs 
1 2 3 4 5
length xs 
1 2 3 4 5 
5
head xs 
1 2 3 4 5
tail xs 
1 2 3 4 5
last xs 
1 2 3 4 5
xs !! 0 
1 2 3 4 5 
0 1 2 3 4
xs !! 2 
1 2 3 4 5 
0 1 2 3 4
xs !! (length xs - 1) 
1 2 3 4 5 
0 1 2 3 4
take 1 xs 
1 2 3 4 5
take 3 xs 
1 2 3 4 5
drop 3 xs 
1 2 3 4 5
drop (length xs - 1) xs 
1 2 3 4 5
reverse xs 
5 4 3 2 1
sum xs 
1 2 3 4 5 
1 + 2 + 3 + 4 + 5 = 15
product xs 
1 2 3 4 5 
1 * 2 * 3 * 4 * 5 = 120
Gracias 
@rulokoba

Haskell - Intro