ambientes de programaciónfp(1)
TRANSCRIPT
-
7/24/2019 Ambientes de ProgramacinFP(1)
1/27
Facilitador:Ing. Yadira Vargas M.Sw.E.Correo electrnico [email protected]
Telfono 560-3308
-
7/24/2019 Ambientes de ProgramacinFP(1)
2/27
Ambientes de Programacin
Paradigmas de
Programacin
Programacin Declarativa Paradigma Funcional
Paradigma Lgico
Programacin Imperativa Paradigma Imperativo
Paradigma Orientado a Objetos
Paradigma dirigido por Eventos
Paradigma Concurrente
-
7/24/2019 Ambientes de ProgramacinFP(1)
3/27
Un Poco de Historia30s Alonzo Church:Desarroll el Clculo de
Lambda
50s John McCarthy
Desarroll Lisp
60s, Peter Landin
Desarroll ISWIM (If you
See What I Mean),
1970s, John Backus
desarroll FP
(Functional
Programming),
1970s, Robin
Milner y otros
desarrollaron
ML (Meta-
Language),
-
7/24/2019 Ambientes de ProgramacinFP(1)
4/27
Paradigma funcional Los programas son expresiones y el nico constructor
sintctico utilizado es la aplicacin de una funcin a sus
argumentos
Las computaciones son realizadas evaluandoexpresiones puras
Haskel
Lisp
SchemeGopher
Miranda
-
7/24/2019 Ambientes de ProgramacinFP(1)
5/27
Paradigmafuncional
El modelo funcional, tiene como
objetivo la utilizacin de funciones
matemticas puras sin efectos.
El esquema del modelo funcional
es similar al de una calculadora. Se
establece una sesin interactiva
entre sistema y usuario: el usuariointroduce una expresin inicial y el
sistema la evala mediante un
proceso de reduccin.
En este procesos se utilizan las
definiciones de funciones realizadas
por el programador hasta obtener un
valor no reducible.
-
7/24/2019 Ambientes de ProgramacinFP(1)
6/27
Paradigma Funcional vs
Imperativo
-
7/24/2019 Ambientes de ProgramacinFP(1)
7/27
Paradigma funcional Programacin Funcional es un estilo de programacin en
el cual el mtodo primario de computacin es la aplicacin
de funciones a los argumentos
-
7/24/2019 Ambientes de ProgramacinFP(1)
8/27
Funcin Una funcin es un mapeo que toma uno o ms
argumentos y produce un nico resultado, y se define
usando una ecuacin dada por:
un nombre para la funcin,
el nombre de cada uno de sus argumentos,
y un cuerpo que especifica cmo el resultado se puede
calcular en funcin de los argumentos.
circunferencia r = 2 * pi * r
-
7/24/2019 Ambientes de ProgramacinFP(1)
9/27
Funciones
El valor que devuelve una funcin est nicamente
determinado por el valor de sus argumentos consiguiendo
que una misma expresin tenga siempre el mismo valor.
Es ms sencillo demostrar la correccin de los
programas ya que se cumplen propiedades matemticas
tradicionales como la propiedad conmutativa, asociativa,
etc.
-
7/24/2019 Ambientes de ProgramacinFP(1)
10/27
Transparencia Referencial Tampoco existen sentencias
imperativas y todas las funciones
tienen transparencia referencial
Unafuncin tiene transparenciareferencial si su resultado
depende nica y exclusivamente
de los parmetros provistos, y no
produce efectos colaterales. Los efectos colaterales son
cualquier cambio en el estado del
sistema
Name: = ++ getLine X
-
7/24/2019 Ambientes de ProgramacinFP(1)
11/27
RecursividadEn este modelo el resultado de un
clculo es la entrada del siguiente
y as sucesivamente hasta que la
composicin produce el resultadodeseado
Factorial n = if n == 0 then 1 else n * fac (n-1)
basada en el principio matemtico de induccin, que se ve
expresada en el uso de tipos de datos recursivos, como las
listas, y funciones recursivas que las operan.
Factorial n = product [1..n]
-
7/24/2019 Ambientes de ProgramacinFP(1)
12/27
Funciones de Orden Superior Un lenguaje utiliza funciones de orden
superior cuando permite que las funciones
sean tratadas como valores de 1 clase,
permitiendo que sean almacenadas enestructuras de datos, que sean pasadas como
argumentos de funciones y que sean
devueltas como resultados.
La utilizacin de funciones de orden
superior proporciona una mayor flexibilidad
al programador, siendo una de las
caractersticas mas sobresalientes de los
lenguajes funcionales.
-
7/24/2019 Ambientes de ProgramacinFP(1)
13/27
Funciones de Orden SuperiorUna funcin de orden superior es una funcin que tomaotras funciones como argumentos o devuelve una funcin
como resultado.
filter (isAlpha) "$#!+abcDEF657"
Salida: "abcDEF"
-
7/24/2019 Ambientes de ProgramacinFP(1)
14/27
Inferencia de Tipos Muchos lenguajes funcionales han adoptado un sistemade inferencia de tipos
Consiste en que el sistema contiene un mecanismo que
infiere el tipo de dato de las expresiones, por lo que no es
obligatoria la declaracin el prototipo de las funciones.
Cuando el programador declara el tipo de alguna
expresin, el sistema verifica que el tipo declarado
coincide con el tipo inferido
Es un arma de doble filo, es una buena practica declarar lasignature o firma de la funcin
addThree :: Int -> Int -> Int -> Int
addThree x y z = x + y + z
-
7/24/2019 Ambientes de ProgramacinFP(1)
15/27
Polimorfismo
zip "ABCD" [1,6,3,23,12]
[('A', 1), ('B', 6), ('C', 3), ('D', 23)]
zip [1,6,3,23] [A,B,C,D]
[(1, 'A'), (6, 'B'), (3, 'C'), (23, 'D')]
Los sistemas de inferencia de tipos aumentan su flexibilidad mediantela utilizacin de polimorfismo, que permite que el tipo de una funcin
dependa de un parmetro.
-
7/24/2019 Ambientes de ProgramacinFP(1)
16/27
Currificacin
Haskell Curry
Currificacin: es el proceso de
descomposicin de una funcin de
mltiples argumentos en una secuencia
encadenada de las funciones de unargumento
-- Antes de la evaluacin:
Primeros5 = take 5 [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
-- take se evala con el argumento 5, y el valor
resultante se aplica a la lista:
(take 5) [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
-- el resultado de aplicar(take 5) a la lista es:
[1,3,5,7]
-
7/24/2019 Ambientes de ProgramacinFP(1)
17/27
Evaluacin ParcialHemos visto que cuando se llama a una funcin con sloalgunos de sus argumentos, se obtiene otra funcin de
regreso. A esto se le denomina Evaluacin Parcial
take5 = take 5
Usted puede hacer esto con cualquier funcin que toma varios
argumentos, lo que hace que la evaluacin parcial una
herramienta de gran alcance
-
7/24/2019 Ambientes de ProgramacinFP(1)
18/27
Concordancia de Patrones Es una forma simple e intuitiva de definir una funcin
Negacion :: Bool -> Bool
Negacion False = True
Negacion True = False
suerte :: Int -> String
suerte 7 = "SUERTE NUMERO 7!"
suerte x = "Lo siento, no tienes suerte!"
fac :: Integer -> Integer fac n
| n == 0 = 1
| n /= 0 = n * fac (n-1)
-
7/24/2019 Ambientes de ProgramacinFP(1)
19/27
Evaluacin PerezosaSolo evaluar un argumento de una funcin si ese argumento
es necesario para calcular el resultado global.
Si un argumento es estructurado(una lista o tupla, por
ejemplo), solo aquellas partes del argumento que sonnecesarias sern examinadas
Square x= x* x Square (1+2)
(1+2)*(1+2)
3*(1+2)
3*3
9
-
7/24/2019 Ambientes de ProgramacinFP(1)
20/27
any (>5) [0,1,2,3,4,5] Salida: False
elem 1 [1,2,3,4,5] Salida True
lcm 4 9 Salida 36
cos (pi/2) Salida 0.0
3 `quot` 12 Salida: 0
break (3==) [1,2,3,4,5] Salida ([1,2],[3,4,5])
product [6,6] Salida 36
Input: compare 2 4 Salida: LT
Input: replicate 3 5 Salida: [5,5,5]
filter (>5) [1,2,3,4,5,6,7,8] Salida: [6,7,8]
Input: zip [1,2,3] [9,8,7] Salida: [(1,9),(2,8),(3,7)]
main = do x
-
7/24/2019 Ambientes de ProgramacinFP(1)
21/27
Paradigma Funcional vs
ImperativoInt suma (int n, int lista []) {
Int total = 0;
For (int i = 0; i< n; ++i)
Total += lista[i];}
Suma [] = 0
Suma (x:xs) = x + suma xs
Asignacin deVariables
Ecuaciones[] lista vacia
: cons una lista
-
7/24/2019 Ambientes de ProgramacinFP(1)
22/27
EjecucinSecuencia en C
i = 1
total = 1
i = 2
total = 3i = 3
total = 6
i = 4
total = 10
i = 5
total = 15
Aplicando Funciones
sum [ 1,2,3,4,5]
= { aplicar sum }
1 + sum [ 2,3,4,5]
= {aplicar sum }1 + ( 2 + sum [ 3,4,5] )
= {aplicar sum }
1 + ( 2 + ( 3 + sum [4,5] )
= {aplicar sum }
= {aplicar + }
15
-
7/24/2019 Ambientes de ProgramacinFP(1)
23/27
Ejemplo
media ns = sum ns `div` length ns
-
7/24/2019 Ambientes de ProgramacinFP(1)
24/27
Ejemplo
palindromo xs = reverse xs
-
7/24/2019 Ambientes de ProgramacinFP(1)
25/27
Ejemplo
triangulo::Int->Int->Int->String
triangulo a b c
| a==b&&b==c&&c==b="triangulo equiltero"| a==b||a==c||b==c="triangulo issceles"
| (a^2 + b^2)==c^2||a^2 + c^2==b^2||c^2 + b^2==a^2="triangulo
rectngulo"
| otherwise="triangulo escaleno"
-
7/24/2019 Ambientes de ProgramacinFP(1)
26/27
Preguntas
-
7/24/2019 Ambientes de ProgramacinFP(1)
27/27
Asignacin #4Resolucin de Problemas
matemticos con Haskell
Entregar un trabajo escrito con lo
siguiente:
IntroduccinPara cada problema
1.Enunciado
2.Marco Terico
3.Planteamiento
4.Codigo debidamente
documentado (adicional archivo hs)Conclusiones
Modalidad: Grupos
Fecha: Lunes 4 de agosto
Para la presentacin:
En clase se expondr un problema
seleccionado al azar.
Cada grupo debe explicar 1
problema y presentar ejecucin y elresto de los grupos debe realizar
aportes
Se evaluaran:
Trabajo Escrito
Presentacin y ayuda Visual
Dominio del Tema/InvestigacinCorrida del Programa
Referencias.
www.haskell.org
http://aprendehaskell.es/main.html
http://www.haskell.org/http://aprendehaskell.es/main.htmlhttp://aprendehaskell.es/main.htmlhttp://www.haskell.org/