Professional Documents
Culture Documents
Ambientes de Programacin
Paradigmas de
Programacin
Programacin Declarativa
Paradigma Funcional
Paradigma Lgico
Programacin Imperativa
Paradigma Imperativo
Paradigma Orientado a Objetos
Paradigma dirigido por Eventos
Paradigma Concurrente
Un Poco de Historia
30s Alonzo Church:
Desarroll el Clculo de
Lambda
1970s, Robin
Milner y otros
desarrollaron
ML (MetaLanguage),
Paradigma funcional
Los programas son expresiones y el nico constructor
sintctico utilizado es la aplicacin de una funcin a sus
argumentos
Las computaciones son realizadas
evaluando
expresiones puras
Haskel
Lisp
Scheme
Gopher
Miranda
Paradigma
funcional
Paradigma Funcional vs
Imperativo
Paradigma funcional
Programacin Funcional es un estilo de programacin en
Funcin
Una funcin es un mapeo que toma uno o ms
circunferencia r = 2 * pi * r
Funciones
Transparencia Referencial
Name: = ++ getLine
Recursividad
En este modelo el resultado de un
clculo es la entrada del siguiente
y as sucesivamente hasta que la
composicin produce el resultado
deseado
Factorial n = if n == 0 then 1 else n * fac (n-1)
Factorial n = product [1..n]
basada en el principio matemtico de induccin, que se ve
expresada en el uso de tipos de datos recursivos, como las
listas, y funciones recursivas que las operan.
Inferencia de Tipos
Muchos lenguajes funcionales han adoptado un sistema
de inferencia de tipos
Consiste en que el sistema contiene un mecanismo que
infiere el tipo de dato de las expresiones, por lo que no es
obligatoria la declaracin el prototipo de las funciones.
Cuando el programador declara el tipo de alguna
expresin, el sistema verifica que el tipo declarado
coincide con el tipo inferido
Es un arma de doble filo, es una buena practica declarar la
signature o firma de la funcin
addThree :: Int -> Int -> Int -> Int
addThree x y z = x + y + z
Polimorfismo
Los sistemas de inferencia de tipos aumentan su flexibilidad mediante
la utilizacin de polimorfismo, que permite que el tipo de una funcin
dependa de un parmetro.
Currificacin
Currificacin:
es
descomposicin de
mltiples argumentos
encadenada de las
argumento
Haskell Curry
el proceso de
una funcin de
en una secuencia
funciones de un
-- Antes de la evaluacin:
Primeros5 = take 5 [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
-- take se evala con el argumento 5, y el valor
resultante se aplica a la lista:
(take 5) [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
-- el resultado de aplicar(take 5) a la lista es:
[1,3,5,7]
Evaluacin Parcial
Hemos visto que cuando se llama a una funcin con slo
algunos de sus argumentos, se obtiene otra funcin de
regreso. A esto se le denomina Evaluacin Parcial
take5 = take 5
Usted puede hacer esto con cualquier funcin que toma varios
argumentos, lo que hace que la evaluacin parcial una
herramienta de gran alcance
Concordancia de Patrones
Es una forma simple e intuitiva de definir una funcin
Negacion :: Bool -> Bool
Negacion False = True
Negacion True = False
Evaluacin Perezosa
Solo evaluar un argumento de una funcin si ese argumento
es necesario para calcular el resultado global.
Si un argumento es estructurado(una lista o tupla, por
ejemplo), solo aquellas partes del argumento que son
necesarias sern examinadas
Square x= x* x
Square (1+2)
(1+2)*(1+2)
3*(1+2)
3*3
9
Algunas
Funciones
de Haskell
Salida: False
elem 1 [1,2,3,4,5]
Salida True
lcm 4 9
Salida 36
cos (pi/2)
Salida 0.0
3 `quot` 12
Salida: 0
Salida ([1,2],[3,4,5])
product [6,6]
Salida 36
Input: compare 2 4
Salida: LT
Input: replicate 3 5
Salida: [5,5,5]
Salida: [6,7,8]
Salida: [(1,9),(2,8),(3,7)]
Salida: Texto
Salida: [4,4,4]
Paradigma Funcional vs
Imperativo
Int suma (int n, int lista []) {
Int total = 0;
For (int i = 0; i< n; ++i)
Total += lista[i];
}
Suma [] = 0
Suma (x:xs) = x + suma xs
Ecuaciones
[] lista vacia
: cons una lista
Asignacin de
Variables
Ejecucin
Secuencia en C
i=1
total = 1
i=2
total = 3
i=3
total = 6
i=4
total = 10
i=5
total = 15
Aplicando Funciones
sum [ 1,2,3,4,5]
= { aplicar sum }
1 + sum [ 2,3,4,5]
= {aplicar sum }
1 + ( 2 + sum [ 3,4,5] )
= {aplicar sum }
1 + ( 2 + ( 3 + sum [4,5] )
= {aplicar sum }
= {aplicar + }
15
Ejemplo
Ejemplo
palindromo xs = reverse xs
Ejemplo
triangulo::Int->Int->Int->String
triangulo a b c
| a==b&&b==c&&c==b="triangulo equiltero"
| a==b||a==c||b==c="triangulo issceles"
| (a^2 + b^2)==c^2||a^2 + c^2==b^2||c^2 + b^2==a^2="triangulo
rectngulo"
| otherwise="triangulo escaleno"
Preguntas
Asignacin #4
Resolucin de Problemas
Para la presentacin:
matemticos con Haskell
En clase se expondr un problema
Entregar un trabajo escrito con lo seleccionado al azar.
siguiente:
Cada grupo debe explicar 1
Introduccin
problema y presentar ejecucin y el
Para cada problema
resto de los grupos debe realizar
1.Enunciado
aportes
2.Marco Terico
Se evaluaran:
3.Planteamiento
Trabajo Escrito
4.Codigo debidamente
Presentacin y ayuda Visual
documentado (adicional archivo hs) Dominio del Tema/Investigacin
Conclusiones
Corrida del Programa
Modalidad: Grupos
Referencias.
Fecha: Lunes 4 de agosto
www.haskell.org
http://aprendehaskell.es/main.html