programación multiparadigma, conveniencia y actualidad

Post on 15-Jun-2015

83 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

An analysis about the convenience of using more than one programming paradigm in an application.

TRANSCRIPT

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 Almaguerjalbert@uci.cu

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 )

top related