Post on 04-Jul-2015
description
transcript
HaskellIntro
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 Platformhttp://www.haskell.org
El lenguaje Haskell
The Haskell Reporthttps://www.haskell.org/onlinereport/haskell2010/
GHCIGlorious 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 bf(a,b) + cd se expresa: f a b + c * df(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]
Listasalgunas 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
20 1 3 4
xs !! 2
1 2 3 4 5
20 1 3 4
xs !! (length xs - 1)
1 2 3 4 5
20 1 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