Anda di halaman 1dari 36

Lic.

Wilber Ramos Lovn


Programacin Funcional en
Haskell
nLaboratorio de Matemticas
Discretas II
nLic. Wilber Ramos Lovn
n Ingeniera Informtica
n Universidad Catlica San Pablo
Lic. Wilber Ramos Lovn
Captulo 1
Conceptos
Fundamentales
Lic. Wilber Ramos Lovn
Software
Programas + Datos = Software
Lic. Wilber Ramos Lovn
Datos
n Son cualquier tipo de informacin almacenable. Por ejemplo:
w Nmeros
w Programas
w Canciones en Cds
w Mapas
w Clicks del mouse
Lic. Wilber Ramos Lovn
Programas
n Programas calculan nuevos datos de antiguos
datos
Lic. Wilber Ramos Lovn
Construyendo sistemas de
Software
n Un sistema largo puede contener muchos millones de lineas de
cdigo.
n Los sistemas de software estan entre los mas complejos
artefactos alguna vez hechos.
n Estos estn construidos por la combinacin de la mayor cantidad
de componentes que sea posible.
Volvo compra partes de
Mistubishi
Bonnier compra
Quicktime de Apple
Lic. Wilber Ramos Lovn
Lenguajes de Programacin
n Programas estan escritos en lenguajes de
programacin.
n Hay cientos de lenguajes de programacin
diferentes, cada uno con sus fortalezas y
debilidades.
n Un sistema grande a menudo contendr
componentes en muchos lenguajes diferentes.
Lic. Wilber Ramos Lovn
Qu lenguaje ensear?
Lenguajes Funcionales Lenguajes Imperativos
Haskell
ML
Scheme
Erlang
C C++
Cobol
Fortran
Visual C++
Assembler
Visual
Basic
Java
Lic. Wilber Ramos Lovn
Usos industriales de lenguajes
funcionales
n Intel (verificacin de microprocesadores).
n Hewlett Packard (correlacin de eventos de
telecomunicacin).
n Ericsson(telecomunicaciones).
n Carlstedt Research & Technology (Programacin
de las cuadrillas de aire).
n Shop.com (e-commerce).
n Thompson (rastreo de radares).
n Motorola (generacin de pruebas)
Lic. Wilber Ramos Lovn
Porqu antiguos lenguajes
sobreviven?
n Cdigo legado
n Programadores legados
Lic. Wilber Ramos Lovn
Porqu Haskell?
n Haskell es un lenguaje de muy alto nivel (muchos
detalles son tomados en cuenta automaticamente).
n Haskell es expresivo y conciso (puede lograr mucho
con poco esfuerzo).
n Haskell es bueno manejando datos complejos y
combinando componentes
n Haskell no es un lenguaje de alta
performance(prioriza tiempo-programador sobre
tiempo-clculo)
Lic. Wilber Ramos Lovn
Programacin Funcional
n Una funcin es una forma de calcular un
resultado desde los argumentos de la
funcin.
Lic. Wilber Ramos Lovn
Programacin Funcional
n Una funcin es una forma de calcular un resultado
desde los argumentos de la funcin.
f(x) = sen x/cos x
game(clicks del mouse) = animacin de pantalla
n Un programa funcional calcula sus resultados en
funcin de sus entradas.
Lic. Wilber Ramos Lovn
Valores y expresiones
n Un valor es una pieza de datos.
2,4, 3.14159,Jhon
n Las expresiones combinan valores usando
funciones y operadores
2+2,2*pi*r
Una expresin calcula un valor.
Lic. Wilber Ramos Lovn
Operaciones
n Los operadores son siempre explcitos
b^2-4*a*c
n NO pueden escribirse como
b
2
-4ac
n Significa
(b^2)-(4*a*c) no b^((2-4)a*c)
La multiplicacin (*) se asocia antes que la
resta(-).
Lic. Wilber Ramos Lovn
Definiciones y tipos
n Una definicin le da un nombre a un valor.
area::Int
area=41*43
Lic. Wilber Ramos Lovn
Definiciones de funcin
n Una definicin de una funcin especifica
como es calculado el resultado desde los
argumentos.
cuadrado::Int->Int
cuadrado x = x*x
Lic. Wilber Ramos Lovn
Notacin de funcin
n Los argumentos de funcin no necesitan ser
encerrados entre parntesis.
area::Int->Int->Int
area b h = b*h
Lic. Wilber Ramos Lovn
Programacin funcional
n Un programa funcional consiste en su mayor parte de
definicin de funciones.
n Las Funciones Simples son usadas para definir otras mas
complejas, las cuales son usadas para definir otras an ms
complejas, y as en adelante.
n Definimos una funcin para calcular el resultado de nuestro
programa final desde sus entradas.
Si puedes escribir definiciones de funciones,puedes escribir
programas funcionales.!
Lic. Wilber Ramos Lovn
Un tour de algunos tipos bsicos
De las matemticas, estamos acostumbrados a
funciones con nmeros como argumentos y
resultados. En programacin, usualmente trabajamos
con valores de tipos mucho ms ricos.
Algunos tipos estn comprendidos en los lenguajes de
programacin (nmeros) , otros los define el
programador (mp3).
Vamos a recorrer algunos tipos incluidos en Haskell.
Lic. Wilber Ramos Lovn
Tipos : Enteros
1,2,3,4,. :: Int
nAlgunas operaciones:
2+3 --------- 5
2*3 --------- 6
2^3 --------- 8
mod 7 2 ----- 1
div 7 2 ----- 3
Lic. Wilber Ramos Lovn
Tipos : Nmeros reales
1.3,2.5,0.453,3.14159,. :: Float
nAlgunas operaciones:
2.5+ 3.5 --------- 7.0
3 - 1.2 --------- 2.8
2/3 --------- 0.333
sin (pi/4) ------- 0.7071
1.4142^2 ------- 1.99996
Lic. Wilber Ramos Lovn
Tipos : Listas
[1,2,3],[7,10] :: [Int]
nAlgunas operaciones:
[2,4,5]++[3,6,8] --------- [2,4,5,3,6,8]
head [4,5,7,8,9] --------- 4
last [6,7,2,1,9] --------- 9
Lic. Wilber Ramos Lovn
Test
Cmo podras agregar 4 al final de la lista
[1,2,3]?
Lic. Wilber Ramos Lovn
Test
Cmo podras agregar 4 al final de la lista
[1,2,3]?
[1,2,3]++[4]
Lic. Wilber Ramos Lovn
Tipos : Cadenas
Hola mundo! :: String
n Algunas operaciones:
Hola++Mundo --------- Hola Mundo
show(2*3) --------- 6
Lic. Wilber Ramos Lovn
Test
Es 2+2 igual a 4?
Lic. Wilber Ramos Lovn
Test
Es 2+2 igual a 4?
NO!
2+2 es una cadena de tres caracteres
4 es una cadena de un caracter
No son el mismo texto!
Lic. Wilber Ramos Lovn
Tipos : Comandos
writeFile myfile Hola! :: IO()
readFile myfile ::IO String
Lic. Wilber Ramos Lovn
Test
Si myfile contiene Hola!, es readFile myfile
igual a Hola! ?
Lic. Wilber Ramos Lovn
Test
Si myfile contiene Hola!, es readFile
myfile igual a Hola! ?
NO!
El resultado de una funcin depende solo de
sus argumentos; Hola! no puede ser
calculado de myfile.
Lic. Wilber Ramos Lovn
Efectos de los comandos
n El resultado de una funcin depende solo de
sus argumentos.
n El efecto de un comando puede ser diferente,
dependiendo de cuando este es ejecutado.
Lic. Wilber Ramos Lovn
Tipos : Funciones
double 2 -------- 4
es una llamada a la funcion
double
(sin argumentos) es un valor de funcin
double :: Int ->Int
double x = x+x
Lic. Wilber Ramos Lovn
Composicin de Funciones
cuadruple 2 -------- doble (doble 2)
doble 4
8
cuadruple :: Int ->Int
cuadruple = doble.doble
Lic. Wilber Ramos Lovn
La Funcin map
dobles [1,2,3] -------- [doble 1, doble 2, doble 3]
[2,4,6]
dobles :: [Int] ->[Int]
dobles = map doble
Lic. Wilber Ramos Lovn
Funciones de orden superior
n La habilidad para computar funciones
(=programas) es una de las ms grandes
fortalezas de Haskell.
n Largas partes de un programa pueden ser
computadas (escritas por las
computadoras), ms que programadas a
mano.

Anda mungkin juga menyukai