ambientes de programaciónfp(1)

Upload: juan-sanchez

Post on 23-Feb-2018

220 views

Category:

Documents


0 download

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/