Retos en ingeniería del software. ○ Problemas ... Introducido teoreticamente por el matemático Eugenio Moggi. ○ Introducido en ... En matemática: f(g(x)) ...
Por qué es importante la programación funcional? Erlang
Haskell
Scala
Retos en ingeniería del software Divide et impera
●
Problemas complejos: dividir
●
Pequeñas soluciones: composición
Monads ● ● ●
Patrón de diseño funcional Introducido teoreticamente por el matemático Eugenio Moggi Introducido en Haskell en los años 90 por Philip Wadler
Los ejemplos de la presentación en Haskell
Tipos de datos data CiudadBolivia = Cbba | StaCruz | Oruro | LaPaz | Tarija | Beni | Pando | Potosi | Sucre
Tipo de dato Clase en OO
Constructores
Composición de funciones en Haskell convertirAString :: Int -> String convertirAString numero = show numero contarCaracteres :: String -> Int contarCaracteres unaCadena = length unaCadena contarDigitos :: Int -> Int contarDigitos numero = (contarCaracteres . convertirAString) numero
En matemática: f(g(x))
Type classes Similar a interfaces en otros lenguajes de programación Ejemplo: convertir cualquier tipo de dato a cadena (similar a toString) class Show a where show :: a -> String ⇒ Ejemplo
Tipo de dato Maybe data Maybe a = Nothing | Just a Objetivo: Funciones totalmente definidas
●
Ejemplo en estilo imperativo
public int dividir (int a, int b) { return a / b; }
Tipo de dato Maybe
● Solución funcional Int
dividir :: Int -> Int -> Maybe Int dividir a 0 = Nothing dividir a b = Just ( div a b )
Funciones que retornan Maybe
Maybe Int
Int
Maybe a
a
String -> Maybe Int Int -> Maybe Persona Pregunta: Cómo combinar funciones que retornan Maybe? ⇒ Ejemplo
Función conector
a
-> (a ->
b
) ->
conector :: Maybe a -> (a -> Maybe b) -> Maybe b conector Nothing _ = Nothing conector (Just x) f = f x
(>>=) :: Maybe a -> (a -> Maybe b) -> Maybe b (>>=) Nothing _ = Nothing (>>=) (Just x) f = f x
b
Función return
a
-> (a ->
b
) ->
b
conector :: Maybe a -> (a -> Maybe b) -> Maybe b Conector requiere algo empaquetado → Solución:función return :: a -> m a
3 convertir en Maybe Int : Just 3
Int
return = Just
Tipo de clase Monad (>>=) :: Maybe a -> (a -> Maybe b) -> Maybe b (>>=) Nothing _ = Nothing (>>=) (Just x) f = f x
class Monad m where (>>=) :: m a -> (a -> m b) -> m b return :: a -> m a
Maybe Monad data Maybe a = Nothing | Just a class Monad m where (>>=) :: m a -> (a -> m b) -> m b return :: a -> m a
instance Monad Maybe where Nothing >>= f = Nothing (Just x) >>= f = f x return = Just
Niveles de abstracción ma
a
Maybe a
a
Maybe Int
Int
Monads como contenedores Maybe
2 Just 2
● ● ● ●
List
1
IO
2 [1,2,3]
Maybe es contenedor: Maybe a Listas son contenedores: [a] IO es un contenedor: IO a Otros contenedors….
3
“Hola” IO “Hola”
Escalabilidad de los monads: composición Composición de funciones del tipo : f :: a -> M b (>=>) :: (a -> M b) -> (b -> M c) -> (a -> M c) return :: a -> M a
Aplicabilidad de los monads: composición ● ● ● ● ●
Parsers Programación paralela Programación asíncrona Transacciones en Base de datos Reactive Programming (eventos)
Muchos otros casos
Conclusiones Cada Monad tiene una estrategia de combinación de funciones Maybe Monad: combinar funciones que posiblemente no retornen un resultado List Monad: combinar funciones que retornan uno o varios valores (indeterminismo)
Conclusiones Monads combinan funciones de una forma elegante ● Maybe ● List ● IO ● Funciones en paralelo ● Funciones Async ● Transacciones en Base de datos ● Muchos otros
Conclusiones Esencia de los Monads: composición
Referencias Todo acerca de los monads (All About monads) https://wiki.haskell.org/All_About_Monads
Haskell para todos (Gabriel Gonzales) http://www.haskellforall.com/
Learn you a Haskell for great good. http://learnyouahaskell.com/
Buscador de funciones https://www.haskell.org/hoogle/
Referencias y código Monads para la programación funcional (Philip Wadler) http://homepages.inf.ed.ac.uk/wadler/papers/marktoberdorf/baastad.pdf
Notions of computation and monads (Eugenio Moggi) http://www.disi.unige.it/person/MoggiE/ftp/ic91.pdf
Presidente de la Sociedad Científica de Ingeniería de Sistemas Univ. ... (+) M. Sc. Ing. Orlando Choque Ayma Director de la Carrera de Ingeniería Informática y ...
Administración de Transporte perdió la señal del sistema ferrocarril. - El centro de control tuvo que detener los servicios de tren en el oeste de Suecia. Un.
15 abr. 2017 - Esta construida por una Herramienta para construir aplicaciones: • Maven, Gradle. • Accede diferentes bases de datos y clientes. • Sql, NoSql.
Argentina, Luxemburgo, Alemania, Suiza, Estados Unidos, Panamá, Irlanda, entre otros países. .... Historia del NULL. ○ Introducido por C.A.R Hoare en Algol ...
Introducido por C.A.R Hoare en Algol W el año 1965. ○ El creador del NULL declaró el 2009 que la introducción de las referencias NULL fué un error de billón ...
Paso 1: detectar los bordes. - Solución final: definir que los bordes son un lugar donde un cambio rápido/brusco en la función de la intensidad de la imagen ocurre. Alias, analizar el gradiente de la imagen. Estas diapositivas toman imágenes de la pr
visión por computadora. País de ... Por que los bordes? Porque usando incluso información parcial, nuestro cerebro es capaz de reconstruir la imagen completa. - Problema: los bordes son ocasionados por una variedad ..... En el ajedrez el numero de pa
Jaque Mate - TVU Canal Universitario. 1/1. 26 de Diciembre del 2017. Cuatro integrantes del proyecto Catecbol (Jheser Guzman Illanes, Mauricio Del Carpio, Ronald Terrazas. Mallea y Ronny Bazan Antequera), hablaron de los nuevos proyectos para la gest
Ruta de Aprendizaje. ○ Nos enfocaremos en los conceptos fundamentales sin entrar en detalles matemáticos. ○ Se proveerán referencias a los fundamentos .... (Speed-up techniques). 4. Muchos parámetros con los cuales jugar (Magia Negra). 5. Pueden sufr
25/11/17 Desarrollo de Servicios Web en Scala y Java. Jean-Paul Calbimonte. Suiza. 02/12/17 Expresiones Regulares para reconocimiento de patrones Ronny ...
Jaque Mate - TVU Canal Universitario. 1/1. 10 de Marzo del 2017. Entrevista en línea a Ronny Bazán quien difundió los objetivos del proyecto e invito a la ...
27 mar. 2017 - La segunda parte del módulo se lo implementará el 'segundo semestre' (agosto- diciembre) donde participantes recibirán capitación más ...
en el área de IAM de Amazon AWS en Seattle, WA - EE.UU como Software Engineer. Previamente trabajo en Youtube-Google y en Yahoo Research como Data Engineer en EE.UU. y en Chile aplicando técnicas de análisis y procesamiento masivo de datos. También t
19 jun. 2017 - Más de 2000 participantes de 9 universidades recibieron capacitación virtual por instructores bolivianos que se encuentran fuera de nuestro ...
Área de Investigación:Telemetría, Ingeniería de Software, Sistemas Operativos,. Protocolos de Internet, Compiladores, Educación a Distancia. Resumen: ...
4 abr. 2017 - De izquierda a derecha, arriba: Ronny Bazan, radica en EEUU; René Pally, en Irlanda; Saúl Medrano, en. EEUU; Ronald Terrazas, en Bélgica; ...