Programación Multiparadigma, conveniencia y actualidad
-
Upload
jose-almaguer -
Category
Software
-
view
83 -
download
0
description
Transcript of Programación Multiparadigma, conveniencia y actualidad
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
PROGRAMACIÓN MULTIPARADIGMA ,CONVENIENCIA Y ACTUALIDAD
José Albert Cruz [email protected]
Departamento de Técnicas de ProgramaciónUniversidad de las Ciencias Informáticas
Mayo de 2009
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
SUMARIO
1 ACTUALIDAD DE LA PMP.NETSoftware distribuido y concurrenteAquí y allá...Paradigmas
Paradigmas de programaciónProgramación FuncionalEjemplo
Técnicas funcionales2 SCALA
Desarrollo de software en la actualidadApreciando Scala
Tipos de funcionesClausuras
Técnicas de PFPattern matchingClases case
Patrones
FOS sobre listas
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
C# 3.0: EXPRESIONES LAMBDA, LINQEXPRESIONES LAMBDA
Manera mucho más concisa de manejar métodosanónimos y por lo tanto de simplificar el trabajo condelegados:
var l i s t = new L i s t < i n t > ( ) ;l i s t . AddRange(new i n t [ ] { 20 , 1 , 4 , 8 , 9 , 44 } ) ;var evenNumbers = l i s t . F i n d A l l (
i => ( i % 2) == 0 ) ;
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
C# 3.0: EXPRESIONES LAMBDA, LINQLINQ
La mayoría del tiempo la pasamos manipulando datos:ADO.NET, XML, reflection y las colecciones. Cada unade las APIs presenta sus características con muypocas facilidades de integración: OO/X mismatch.
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
C# 3.0: EXPRESIONES LAMBDA, LINQLINQ
El API de LINQ es un intento (satisfactorio) de proveeruna manera consistente en la cual los programadorespuedan obtener y manipular “datos" en el sentidoamplio de la palabra.
s t r ing [ ] currentVideoGames = { " Morrowind " ," BioShock " , " Ha l f L i f e 2 : Episode 1 " ," The Darkness " , " Daxter " , " System Shock 2 " } ;
IEnumerable<str ing > subset =from g in currentVideoGameswhere g . Length > 6 orderby gse lec t g ;
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
F#
“...the somewhat mathematical slant of functionalprogramming just seems naturally appealing toprofessionals whose primary domain is described withmathematical notation - domains such as financial,scientific and technical computing..."
S. SomasegarSenior Vice President, Developer DivisionMicrosoft
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
SOFTWARE DISTRIBUIDO Y CONCURRENTEERLANG
Funcional
Concurrente
Muy eficiente
Diseñado para sistemas de tiempo real
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
SOFTWARE DISTRIBUIDO Y CONCURRENTEERLANG
loop ( ) −>receive
{ rec tang le , Width , Ht } −>i o : fo rmat ( " Area o f rec tang le i s ~p~n " ,
[ Width ∗ Ht ] ) , loop ( ) ;{ c i r c l e , R} −>
i o : fo rmat ( " Area o f c i r c l e i s ~p~n " ,[ 3.14159 ∗ R ∗ R] ) , loop ( ) ;
Other −>i o : fo rmat ( " I don ’ t know what the area
o f a ~p i s ~n " , [ Other ] ) , loop ( )end .
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
SOFTWARE DISTRIBUIDO Y CONCURRENTEERLANG
1> Pid = spawn ( fun area_server0 : loop / 0 ) .<0.36.0 >2> Pid ! { rec tang le , 6 , 10 } .Area of rec tang le i s 60{ rec tang le ,6 ,10 }3> Pid ! { c i r c l e , 23 } .Area of c i r c l e i s 1661.90{ c i r c l e ,23 }
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
OTRAS TECNOLOGÍAS
1 JavaScript/ActionScript2 JavaFX3 Clojure4 Haskell5 R6 Mathematica7 Ruby: RoR8 Python
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
PROGRAMACIÓN ORIENTADA A OBJETOS
Entes que se solicitan servicios a travésde mensajesCada objeto es caracterizado por:
atributos ⇒ ESTADOmétodos ⇒ Alteran el estado y/o informan sobre él
Desde cualquier punto se puede alterar elestado de cualquier objeto
niveles de acceso en clases/metodologías de ISW: NOSUFICIENTES, sobran los ejemplos:
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
COSTO DE LOS ERRORES DE SOFTWARE
Software errors cost the U.S. economy $60billion annually in rework, lost productivityand actual damages. We all know softwarebugs can be annoying, but faulty software canalso be expensive, embarrassing, destructiveand deadly.
http://www.nist.gov/public_affairs/releases/n02-10.htm
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
CRISIS DEL SOFTWARE
Los programadores que se enfrentan a laconstrucción de grandes sistemas desoftware observan que sus productos noson fiables.
La raíz del problema radica en la dificultadde demostrar que el sistema cumple losrequisitos especificados.
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
CRISIS DEL SOFTWARE
Los programadores que se enfrentan a laconstrucción de grandes sistemas desoftware observan que sus productos noson fiables.
La raíz del problema radica en la dificultadde demostrar que el sistema cumple losrequisitos especificados.
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
POSIBLES SOLUCIONES
Ingeniería del Software: solución de losproblemas de Análisis y Diseño degrandes proyectos.
Síntesis de Programas: obtener a partirde unas especificaciones formales códigoejecutable.
Modelo de computación diferente almodelo imperativo tradicional.
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
POSIBLES SOLUCIONES
Ingeniería del Software: solución de losproblemas de Análisis y Diseño degrandes proyectos.
Síntesis de Programas: obtener a partirde unas especificaciones formales códigoejecutable.
Modelo de computación diferente almodelo imperativo tradicional.
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
POSIBLES SOLUCIONES
Ingeniería del Software: solución de losproblemas de Análisis y Diseño degrandes proyectos.
Síntesis de Programas: obtener a partirde unas especificaciones formales códigoejecutable.
Modelo de computación diferente almodelo imperativo tradicional.
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
MODELO DE COMPUTACIÓN
Los problemas son inherentesal modelo computacionalutilizado y su solución no seencontrará a menos que seutilice un modelo diferente.
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
PROGRAMACIÓN DECLARATIVA
Establece qué debe ser computado, pero
No necesariamente cómo computarlo
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
PROGRAMACIÓN DECLARATIVA
Establece qué debe ser computado, pero
No necesariamente cómo computarlo
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
LENGUAJE DECLARATIVO
Sus frases describen relaciones entre losdatos
Oculta los algoritmos dentro de lasemántica del lenguaje
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
LENGUAJE DECLARATIVO
Sus frases describen relaciones entre losdatos
Oculta los algoritmos dentro de lasemántica del lenguaje
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
CONSTRUCCIÓN DE PROGRAMAS
Imperativa : estudiar las secuencias deinstrucciones que debo dar al computadorpara buscar la solución (acciones arealizar)
Declarativa : ¿cómo expresar ladescripción del problema para que elcomputador pueda buscar las soluciones?(conocimiento acerca del problema)
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
CONSTRUCCIÓN DE PROGRAMAS
Imperativa : estudiar las secuencias deinstrucciones que debo dar al computadorpara buscar la solución (acciones arealizar)
Declarativa : ¿cómo expresar ladescripción del problema para que elcomputador pueda buscar las soluciones?(conocimiento acerca del problema)
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
PARADIGMA FUNCIONAL
Abstracción fundamental: la funciónmatemática
Programar consiste en definir funciones apartir de otras más sencillas (usandooperaciones básicas: composición,recursión y condicional)
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
PARADIGMA FUNCIONAL
Abstracción fundamental: la funciónmatemática
Programar consiste en definir funciones apartir de otras más sencillas (usandooperaciones básicas: composición,recursión y condicional)
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
PARADIGMA FUNCIONAL
Transparencia referencial: el valor quedevuelve una función está únicamentedeterminado por el valor de susargumentos, por lo que una expresióntiene siempre el mismo valor.
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
COMPROBACIÓN DE PRIMALIDAD
prime n =n > 1 && a l l ( \ x −> rem n x /= 0 ) [ 2 . . n−1]
&& ⇒ denota conjunción
rem n x /= 0 ⇒ expresa que el resto de ladivisión de n por x es distinto de cero. Enotras palabras: x no es un divisor propiode n
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
COMPROBACIÓN DE PRIMALIDAD
prime n =n > 1 && a l l ( \ x −> rem n x /= 0 ) [ 2 . . n−1]
&& ⇒ denota conjunción
rem n x /= 0 ⇒ expresa que el resto de ladivisión de n por x es distinto de cero. Enotras palabras: x no es un divisor propiode n
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
COMPROBACIÓN DE PRIMALIDAD
prime n =n > 1 && a l l ( \ x −> rem n x /= 0 ) [ 2 . . n−1]
&& ⇒ denota conjunción
rem n x /= 0 ⇒ expresa que el resto de ladivisión de n por x es distinto de cero. Enotras palabras: x no es un divisor propiode n
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
COMPROBACIÓN DE PRIMALIDADNUESTRO PRIMER PROGRAMAHASKELL
prime n =n > 1 && a l l ( \ x −> rem n x /= 0 ) [ 2 . . n−1]
( x -> rem n x /= 0 ) ⇒ es la propiedad deno ser un divisor propio de n
[2..n-1] ⇒ denota la lista de enterosdesde 2 hasta n-1 (incluido)
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
COMPROBACIÓN DE PRIMALIDADNUESTRO PRIMER PROGRAMAHASKELL
prime n =n > 1 && a l l ( \ x −> rem n x /= 0 ) [ 2 . . n−1]
( x -> rem n x /= 0 ) ⇒ es la propiedad deno ser un divisor propio de n
[2..n-1] ⇒ denota la lista de enterosdesde 2 hasta n-1 (incluido)
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
COMPROBACIÓN DE PRIMALIDADNUESTRO PRIMER PROGRAMAHASKELL
prime n =n > 1 && a l l ( \ x −> rem n x /= 0 ) [ 2 . . n−1]
all ⇒ denota la prueba de que todos losmiembros de la lista cumplen con lapropiedad
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
DEFINIENDO FUNCIONESECUACIONES CON GUARDAS
Las funciones pueden definirse usando guardedequations: una secuencia de expresiones lógicas queson usadas para escoger una de las definiciones, elproceso de búsqueda comienza por la primera (dearriba a abajo) y continúa hasta que se encuentre unaque evalúe a True.
s igno n | n < 0 = −1| n == 0 = 0| otherwise = 1
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
DEFINIENDO FUNCIONESPATTERN MATCHING
Una secuencia de expresiones llamadas patrones esusada para escoger entre un conjunto de posiblesresultados:
True & True = TrueTrue & False = FalseFalse & True = FalseFalse & False = False
De ellas se coge el primer resultado para el que sesatisfaga el patrón.
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
PATTERN MATCHINGL ISTAS POR COMPREHENSIÓN
Pattern matching para escoger elementos, esencia delpatrón send/recieve de la librería Actors:
> [ x | ( x , ’M’ ) <− [ ( 1 , ’M’ ) , (2 , ’F ’ ) ,(4 , ’M’ ) ] ]
[ 1 , 4 ]
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
TÉCNICAS DEPROGRAMACIÓN FUNCIONALEXPRESIONES LAMBDA
Las funciones pueden ser construidas “sin nombre"usando expresiones lambda:
\ x −> 2 ∗ x
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
EXPRESIONES LAMBDAUTILIDAD
Formalización de la definición de funciones curried:
add x y = \ x −> ( \ y −> x + y )
Evitar crear funciones que solo se usan una vez:
impares n = [ f t | t <− [ 0 . . n−1]where f x = x ∗ 2 + 1
impares n = [ ( \ x −> x∗2+1) t | t < − [0 . .n−1]
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
TÉCNICAS DEPROGRAMACIÓN FUNCIONALFUNCIONES DE ORDEN SUPERIOR
Definición: una función es considerada de ordensuperior si espera una función como argumento odevuelve una función como resultado:
tw ice f x = f ( f x )
> tw ice ( \ x−>x ∗2) 312
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
PROCESAMIENTO DE LISTASMAP: APLICA UNA FUNCIÓN A TODOS LOS ELEMENTOS DE UNA LISTA
map f xs = [ f x | x <− xs ]
> map ( \ x−>x+1) [ 1 , 3 , 5 , 7 ][ 2 , 4 , 6 , 8 ]
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
LA FUNCIÓN MAP
Definición recursiva:
map f [ ] = [ ]map f ( x : xs ) = f x : map f xs
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
PROCESAMIENTO DE LISTAS
filter: Selecciona a todos los elementos de una listaque satisfacen un determinado predicado, dondepredicado (o propiedad) es una función que retorna unvalor lógico.
f i l t e r p xs = [ x | x <− xs , p x ]
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
LA FUNCIÓN FILTER
Definición recursiva:
f i l t e r p [ ] = [ ]f i l t e r p ( x : xs ) | p x = x : f i l t e r p xs
| otherwise f i l t e r p xs
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
LA FUNCIÓN FOLDR
Muchas funciones sobre listas pueden ser definidasusando el siguiente patrón de recursión:
f [ ] = vf ( x : xs ) = x op f xs
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
LA FUNCIÓN FOLDREJEMPLOS
La función mapea lista vacía ([]) a un valor v, y,cualquier lista no vacía a un operador op (binario)aplicado a la cabeza de la lista y al resultado deprocesar recursivamente la cola de la lista:
suma [ ] = 0suma ( x : xs ) = x + suma xs
producto [ ] = 1producto ( x : xs ) = x ∗ producto xs
o [ ] = Falseo ( x : xs ) = x or o xs
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
LA FUNCIÓN FOLDRDEFINICIÓN
La función foldr (foldl) encapsula este patrón derecursión con el operador y el valor v comoargumentos:
suma = f o l d r ( + ) 0
producto = f o l d r ( ∗ ) 1
o [ ] = f o l d r ( or ) False
y [ ] = f o l d r (and ) True
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
LA FUNCIÓN FOLDR1DEFINICIÓN
La función foldr1 puede definirse así:
fo ld r1 op [ x ] = x
fo ld r1 op ( x : xs ) = op x ( fo ld r1 op xs )
Siendo # un operador binario infijo:
fo ld r1 ( # ) [ x1 , x2 , . . . , xn ] =x1 # ( x2 # ( . . . ( xn−1 # xn ) . . . ) )
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
EJEMPLODEFINIENDO EL MÁXIMO DE UNA LISTA :
max l i s t l i s t = fo ld r1 max l i s t
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
DESARROLLO DE SOFTWARE EN LA ACTUALIDAD
Muchos LPs trabajando juntos
JavaScript
Perl/Python/Ruby/Groovy (scripting en elservidor)
JavaFX (UI)
Java (business logic)
SQL (for database access)
Integración: XML, strings.
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
DESARROLLO DE SOFTWARE EN LA ACTUALIDAD
Muchos LPs trabajando juntos
JavaScript
Perl/Python/Ruby/Groovy (scripting en elservidor)
JavaFX (UI)
Java (business logic)
SQL (for database access)
Integración: XML, strings.
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
ALTERNATIVA : LENGUAJES ESCALABLES
Un lenguaje es escalable si es adecuado paradesarrollar tanto programas pequeños y comograndes.
Tratar necesidades de dominiosespecíficos meiante DSLs en vez delenguajes externos.
Scala logra esto mediante una mescla deusuarios expertos (para el framework) yno expertos (para el código deaplicación).
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
ALTERNATIVA : LENGUAJES ESCALABLES
Un lenguaje es escalable si es adecuado paradesarrollar tanto programas pequeños y comograndes.
Tratar necesidades de dominiosespecíficos meiante DSLs en vez delenguajes externos.
Scala logra esto mediante una mescla deusuarios expertos (para el framework) yno expertos (para el código deaplicación).
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
ALTERNATIVA : LENGUAJES ESCALABLES
Un lenguaje es escalable si es adecuado paradesarrollar tanto programas pequeños y comograndes.
Tratar necesidades de dominiosespecíficos meiante DSLs en vez delenguajes externos.
Scala logra esto mediante una mescla deusuarios expertos (para el framework) yno expertos (para el código deaplicación).
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
EJEMPLOS
Añadir estructuras de control:
using (new BufferedReader (new Fi leReader ( path ) ) ) {
f => p r i n t l n ( f . readLine ( ) )}
En vez de:
val f = new BufferedReader (new Fi leReader ( path ) )
t r y {p r i n t l n ( f . readLine ( ) )
}f i n a l l y {
i f ( f != nu l l ) f . c lose ( )}
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
EJEMPLOSAÑADIR ESTRUCTURAS DE CONTROL:
s i es c i e r t o que 51 < 6 hacer {Consola i m p r i m i r " s i "
} s i no l o es hacer {Consola i m p r i m i r " no "
}
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
EJEMPLOSREDEFINICIÓN DE APIS
Python
fo r root , d i r s , f i l e s in os . walk ( ’ . ’ ) :fo r name in f i l e s :
i f name[ −3: ] == ’ . py ’ :procesar (name)
Scala
fo r ( ( parent , d i r s , f i l e s ) <− " . " . walk )fo r (name <− f i l e s
i f (name endsWith " . py " )) procesar (name)
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
¿CÓMO LOGRARLO?WITH
def using [ T <: { def close ( ) } ]( resource : T ) ( b lock : T => Un i t ) {
t r y {b lock ( resource )
} f i n a l l y {i f ( resource != nu l l ) resource . c lose ( )
}}
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
¿CÓMO LOGRARLO?SI ES CIERTO QUE... HACER
class T16 ( cond : => Boolean , i n s t I f : => Un i t ) {def hacer ( i n s t E l se : => Un i t ) {
i f ( cond )i n s t I f
elsei n s t E l se
}}
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
FUNCIONESL ITERALES FUNCIONALES
Funciones de primera clase: se pueden escribirfunciones sin nombre (lambdas) que constituyenvalores.
( x : I n t ) => x + 1
var incrementar = ( x : I n t ) => x + 1
> incrementar (10)11
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
FUNCIONESCLAUSURAS (CLOSURES)
En el cuerpo de un literal de función se puedenreferenciar no solo parámetros del literal, tambiénvariables del ámbito:
val suma = ( x : I n t , y : I n t ) = x + yvar mas = 1val sumaConMas = ( x : I n t ) => x + mas
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
UTILIDAD DE LAS TÉCNICAS DE PFREDUCCIÓN DE CÓDIGO
Parte común de las funciones: el cuerpoParte variable: los parámetros
Uso de literales funcionales: convierte a los algoritmos(código) en parámetros (datos).
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
UTILIDAD DE LAS TÉCNICAS DE PFREDUCCIÓN DE CÓDIGO
Parte común de las funciones: el cuerpoParte variable: los parámetros
Uso de literales funcionales: convierte a los algoritmos(código) en parámetros (datos).
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
FUNCIONES DE ORDEN SUPERIOR:SIMPLIFICACIÓN DE CÓDIGO
def t ieneNegat ivos (nums : L i s t [ I n t ] ) =nums . e x i s t s ( _ < 0)
def t ieneImpares (nums : L i s t [ I n t ] ) =nums . e x i s t s ( _ % 2 == 1)
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
CLASES CASE Y PATTERN MATCHING
> abstract class Exprcase class Var (name : S t r i n g ) extends Exprcase class Number(num: Double ) extends Exprcase class UnOp( opera to r : S t r ing , arg : Expr
extends Exprcase class BinOp ( opera to r : S t r ing ,
l e f t : Expr , r i g h t : Expr ) extends Expr
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
PATTERN MATCHINGPATRONES DE CONSTRUCTOR
def s i m p l i f i c a r ( expr : Expr ) : Expr =expr match {case UnOp( "−" , UnOp( "−" , e ) ) => ecase BinOp ( "+ " , e , Number ( 0 ) ) => ecase BinOp ( " ∗ " , e , Number ( 1 ) ) => ecase _ => expr
}
> s i m p l i f i c a r (UnOp( "−" , UnOp( "−" , Var ( " x " ) ) ) )res4 : Expr = Var ( x )
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
PATTERN MATCHINGPATRONES DE SECUENCIAS
def comienzaConCero ( expr : L i s t [ I n t ] ) =expr match {case L i s t (0 , _ , _ ) => p r i n t l n ( " Encontrado " )case _ =>
}
def comienzaConCero2 ( expr : L i s t [ I n t ] ) =expr match {case L i s t (0 , _∗ ) => p r i n t l n ( " Encontrado " )case _ =>
}
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
PATTERN MATCHINGPATRONES TIPADOS
def tamanno( x : Any ) =x match {
case s : S t r i n g => s . leng thcase m: Map[ _ , _ ] => m. s izecase _ => −1
}
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
PATRONES TIPADOSUSO
> tamanno( " abc " )res15 : I n t = 3
> tamanno(Map(1 −> ’ a ’ ,2 −> ’ b ’ ) )
res16 : I n t = 2
> tamanno( Math . Pi )res17 : I n t = −1
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
TRANSFORMACIONESMAP
> L i s t (1 , 2 , 3) map ( _ + 1)L i s t (2 , 3 , 4)
> val words = L i s t ( " the " , " qu ick " ," brown " , " fox " )
> words map ( _ . leng th )L i s t (3 , 5 , 5 , 3)
> words map ( _ . t o L i s t . reverse . mkStr ing )L i s t ( eht , kciuq , nworb , xo f )
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
TRANSFORMACIONESFLATMAP
Toma una función como segundo operando y da porresultado la concatenación de todos los resultados
> L i s t . range (1 , 5) f la tMap (i => L i s t . range (1 , i ) map ( j => ( i , j )
)L i s t ( ( 2 , 1 ) , ( 3 , 1 ) , ( 3 , 2 ) , ( 4 , 1 ) , ( 4 , 2 ) , ( 4 , 3 ) )
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
FILTRADO DE LISTASFILTER
> L i s t (1 , 2 , 3 , 4 , 5) f i l t e r ( _ % 2 == 0)L i s t (2 , 4)
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
FILTRADO DE LISTASFIND
> L i s t (1 , 2 , 3 , 4 , 5) f i n d ( _ % 2 == 0)Some( 2 )
> L i s t (1 , 2 , 3 , 4 , 5) f i n d ( _ <= 0)None
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
FILTRADO DE LISTASTAKEWHILE
> L i s t (1 , 2 , 3 , −4, 5) takeWhile ( _ > 0)L i s t (1 , 2 , 3)
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
FILTRADO DE LISTASDROPWHILE
> val words = L i s t ( " the " , " qu ick " , " brown " , " fo> words dropWhile ( _ s t a r t sW i t h " t " )L i s t ( quick , brown , fox )
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
FILTRADO DE LISTASFORALL / EXISTS
val d3 : L i s t [ L i s t [ I n t ] ] =L i s t (
L i s t (1 , 0 , 0 ) ,L i s t (0 , 1 , 0 ) ,L i s t (0 , 0 , 1)
)def t i eneF i l aCe ro (m: L i s t [ L i s t [ I n t ] ] ) =
m e x i s t s ( row => row f o r a l l ( _ == 0 ) )
> t i eneF i l aCe ro ( d3 )fa lse
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
FOLDING
def sum( xs : L i s t [ I n t ] ) : I n t = (0 / : xs ) ( _ + _ )def product ( xs : L i s t [ I n t ] ) : I n t = (1 / : xs ) ( _
> ( " " / : words ) ( _ +" " + _ )the qu ick brown fox
FIMAT XXI
ProgramaciónFunciona-
l/OO
Actualidadde la PMP.NET
Softwaredistribuido yconcurrente
Aquí y allá...
TécnicastradicionalesProgramaciónOrientada a Objetos
Realidad dela industriadel softwareErrores de software
Crisis del Software
Paradigmas
Paradigmas deprogramación
ParadigmaFuncional
ProgramaciónFuncional
Ejemplo
Haskell
Definición de
FOLDING, EJEMPLOSORDENACIÓN
> L i s t (1 , −3, 4 , 2 , 6) so r t ( _ < _ )L i s t (−3 , 1 , 2 , 4 , 6)
> words so r t ( _ . leng th > _ . leng th )L i s t ( quick , brown , fox , the )