3_programacion funcional con haskell

Download 3_Programacion Funcional Con Haskell

Post on 12-Apr-2015

52 views

Category:

Documents

6 download

Embed Size (px)

TRANSCRIPT

Programacin Funcional Haskell Elementos de Haskell

Programacin Funcional en HaskellLenguajes de Programacin

Ren Mac Kinney RomeroUAM - Iztapalapa

17 de Septiembre de 2012

LP 12I - Ren Mac Kinney Romero

Programacin Funcional en Haskell

Programacin Funcional Haskell Elementos de Haskell

ResumenProgramacin Funcional Filosofa Modelo de reescritura Haskell Denicin de funciones Interprete de Haskell Listas y tipos Reescritura Elementos de Haskell Estructuras de control Comentarios Fuertemente tipicado Preludio y Ejemplos

LP 12I - Ren Mac Kinney Romero

Programacin Funcional en Haskell

Programacin Funcional Haskell Elementos de Haskell

Filosofa Modelo de reescritura

Resumen

Programacin Funcional

Haskell

Elementos de Haskell

LP 12I - Ren Mac Kinney Romero

Programacin Funcional en Haskell

Programacin Funcional Haskell Elementos de Haskell

Filosofa Modelo de reescritura

Resumen

Programacin Funcional Filosofa Modelo de reescritura

Haskell

Elementos de Haskell

LP 12I - Ren Mac Kinney Romero

Programacin Funcional en Haskell

Programacin Funcional Haskell Elementos de Haskell

Filosofa Modelo de reescritura

Otra forma de proponer la computacin Basada en el Calculo Lambda de Church y Kleene Toda expresin computable se puede expresar como expresin

Se caracteriza por programar con valores, funciones y formas funcionales. Es declarativo, se describe como son las funciones y no como calcularlas. Para calcular el valor de las funciones se utiliza el modelo de la reduccin

( -redex)

LP 12I - Ren Mac Kinney Romero

Programacin Funcional en Haskell

Programacin Funcional Haskell Elementos de Haskell

Filosofa Modelo de reescritura

Resumen

Programacin Funcional Filosofa Modelo de reescritura

Haskell

Elementos de Haskell

LP 12I - Ren Mac Kinney Romero

Programacin Funcional en Haskell

Programacin Funcional Haskell Elementos de Haskell

Filosofa Modelo de reescritura

No importa el orden en que se evale una funcin, siempre se obtiene el mismo resultado. Es decir que podemos evaluar una expresin en cualquier orden y siempre obtendremos el mismo resultado. Dadas

f (x ) g (y )

=x x +2 =y +y = g (5) g (5) + 2 = 10 10 + 2 = 102 = f (5 + 5) = f (10) = 10 10 + 2 = 102

f (g (5))

LP 12I - Ren Mac Kinney Romero

Programacin Funcional en Haskell

Programacin Funcional Haskell Elementos de Haskell

Denicin de funciones Interprete de Haskell Listas y tipos Reescritura

Resumen

Programacin Funcional

Haskell

Elementos de Haskell

LP 12I - Ren Mac Kinney Romero

Programacin Funcional en Haskell

Programacin Funcional Haskell Elementos de Haskell

Denicin de funciones Interprete de Haskell Listas y tipos Reescritura

Haskell Lenguaje funcional. Hugs Interprete que calcula formas normales. GHC Compilador de Haskell

LP 12I - Ren Mac Kinney Romero

Programacin Funcional en Haskell

Programacin Funcional Haskell Elementos de Haskell

Denicin de funciones Interprete de Haskell Listas y tipos Reescritura

ResumenProgramacin Funcional

Haskell Denicin de funciones Interprete de Haskell Listas y tipos Reescritura

Elementos de Haskell

LP 12I - Ren Mac Kinney Romero

Programacin Funcional en Haskell

Programacin Funcional Haskell Elementos de Haskell

Denicin de funciones Interprete de Haskell Listas y tipos Reescritura

La denicin de las siguientes funciones

f x

=x +2 = n fact (n 1) =1

fact (n) fact (0)

se hace en Haskell de la siguiente manera

f x = x + 2 fact (n) = n * fact (n-1) fact (0) = 1

LP 12I - Ren Mac Kinney Romero

Programacin Funcional en Haskell

Programacin Funcional Haskell Elementos de Haskell

Denicin de funciones Interprete de Haskell Listas y tipos Reescritura

La funcin tiene que ir en la primera columna. Si la funcin ocupa ms de un rengln debe tener sangra a partir del segundo rengln.

fact (n) =

n * fact (n-1)

LP 12I - Ren Mac Kinney Romero

Programacin Funcional en Haskell

Programacin Funcional Haskell Elementos de Haskell

Denicin de funciones Interprete de Haskell Listas y tipos Reescritura

ResumenProgramacin Funcional

Haskell Denicin de funciones Interprete de Haskell Listas y tipos Reescritura

Elementos de Haskell

LP 12I - Ren Mac Kinney Romero

Programacin Funcional en Haskell

Programacin Funcional Haskell Elementos de Haskell

Denicin de funciones Interprete de Haskell Listas y tipos Reescritura

prelude>_ cosas prelude> 5+5 10 Da resultado

a evaluar

prelude> 23423*76342 1788158666 Es el resultado prelude> :? ayuda

prelude> \x -> x*3+sin(x) ERROR - Cannot find "show"function for: *** Expression : \x -> x * 3 + sin x *** Of type : Double -> Double Da resultado

LP 12I - Ren Mac Kinney Romero

Programacin Funcional en Haskell

Programacin Funcional Haskell Elementos de Haskell

Denicin de funciones Interprete de Haskell Listas y tipos Reescritura

prelude> (\x -> x*3+sin(x)) 4 11.2431975046921 Es el resultado prelude> let f = (\x -> sin(x2)) in f 4 -0.287903316665065 Es el resultado

LP 12I - Ren Mac Kinney Romero

Programacin Funcional en Haskell

Programacin Funcional Haskell Elementos de Haskell

Denicin de funciones Interprete de Haskell Listas y tipos Reescritura

ResumenProgramacin Funcional

Haskell Denicin de funciones Interprete de Haskell Listas y tipos Reescritura

Elementos de Haskell

LP 12I - Ren Mac Kinney Romero

Programacin Funcional en Haskell

Programacin Funcional Haskell Elementos de Haskell

Denicin de funciones Interprete de Haskell Listas y tipos Reescritura

Haskell es fuertemente tipicado y podemos utilizar los siguientes tipos bsicos: Tipo Int Fractional Float (a,b) Char Nombre entero fracciones otante tuplas caracter cadena Ejemplo 5 3/4 3.141592 (1,2) 'a' Hola (que es una lista de caracteres 'H' 'o' 'l' 'a') Para saber el tipo de una expresin: expresin

[Char]

:type [1,2]

Tipo de la

LP 12I - Ren Mac Kinney Romero

Programacin Funcional en Haskell

Programacin Funcional Haskell Elementos de Haskell

Denicin de funciones Interprete de Haskell Listas y tipos Reescritura

Las listas se representan mediante la notacin de corchetes. La lista

[1, 2, 3, 4, 5]es de tipo [Int] La lista

[1, 2,

a

,

b

]

es invlida porque no existe un tipo que se le pueda asignar. Una lista tambin se puede representar utilizando el constructor : , por ejemplo

[1, 2, 3, 4, 5] 1 : 2 : 3 : 4 : 5 : []La lista

[]

es la lista vaca.

LP 12I - Ren Mac Kinney Romero

Programacin Funcional en Haskell

Programacin Funcional Haskell Elementos de Haskell

Denicin de funciones Interprete de Haskell Listas y tipos Reescritura

EjemploLa siguiente funcin regresa la longitud de una lista

longitud [] = 0 longitud (x:xs) = 1 + longitud xs

EjemploLa siguiente funcin concatena dos listas

(++) [] (x:xs) = (x:xs) (++) (y:ys) (x:xs) = y:(ys ++ (x:xs))

LP 12I - Ren Mac Kinney Romero

Programacin Funcional en Haskell

Programacin Funcional Haskell Elementos de Haskell

Denicin de funciones Interprete de Haskell Listas y tipos Reescritura

ResumenProgramacin Funcional

Haskell Denicin de funciones Interprete de Haskell Listas y tipos Reescritura

Elementos de Haskell

LP 12I - Ren Mac Kinney Romero

Programacin Funcional en Haskell

Programacin Funcional Haskell Elementos de Haskell

Denicin de funciones Interprete de Haskell Listas y tipos Reescritura

EjemploCon reescritura obtenemos el valor de una funcinObtener la longitud de la lista [1,2,3]. longitud [1,2,3] = 1 + longitud [2,3] = 1 + (1 + longitud [3]) = 1 + (1 + (1 + longitud [])) = 1 + (1 + (1 + 0)) = 3

LP 12I - Ren Mac Kinney Romero

Programacin Funcional en Haskell

Programacin Funcional Haskell Elementos de Haskell

Denicin de funciones Interprete de Haskell Listas y tipos Reescritura

longitud = = = = = = = = =

([4, 5] + +[9, 8]) es: longitud (4 : ([5] + +[9, 8])) 1+longitud ([5] + +[9, 8])) 1+longitud ([5] + +[9, 8])) 1+longitud (5 : ([] + +[9, 8])) 1 + 1+longitud ([] + +[9, 8])) 1 + 1+longitud [9, 8] 1 + 1 + 1+longitud [8] 1 + 1 + 1 + 1+longitud [] 1+1+1+1+0

= longitud = = = = = =

(4 : 5 : ([] + +[9, 8])) longitud (4 : 5 : [9, 8]) 1+longitud 5 : [9, 8] 1 + 1+longitud [9, 8] 1 + 1 + 1+longitud [8] 1 + 1 + 1 + 1+longitud [] 1+1+1+1+0

= 4

= 4

Solucin 1

Solucin 2

LP 12I - Ren Mac Kinney Romero

Programacin Funcional en Haskell

Programacin Funcional Haskell Elementos de Haskell

Denicin de funciones Interprete de Haskell Listas y tipos Reescritura

Notas

Siempre se debe obtener el mismo resultado, no importando el camino. La forma en que una expresin esta completamente reducida (es decir ya no se puede reescribir) se llama forma normal.

LP 12I - Ren Mac Kinney Romero

Programacin Funcional en Haskell

Programacin Funcional Haskell Elementos de Haskell

Estructuras de control Comentarios Fuertemente tipicado Preludio y Ejemplos

Resumen

Programacin

Recommended

View more >