Documentos

Páginas: 19 (4534 palabras) Publicado: 24 de octubre de 2014
Programación Funcional
1. Evolución y Conceptos básicosFalta por hacer: Falta por desarrollar esta sección con más detalle
Bases teóricas: cálculo lambda de ChurchLISP, Funciones de orden superior
ISWIM, notación infija
FP, combinadores
ML, polimorfismo paramétrico, chequeo estático de tipos, inferencia de tipos
Hope, encaje de patrones
Miranda, Evaluación perezosa
Haskell,sobrecarga (clases de tipos), Entrada/Salida (mónadas)
2. Definición de funcionesLos lenguajes funcionales utilizan un modelo computacional simple similar al de una calculadora.
Definición (Función)
Una función entre dos conjuntos A y B es una regla que permite asociar a cada elemento x perteneciente a A, un elemento y perteneciente a B
Existen diversos métodos de definición de funciones.
Lanotación lambda
Ejemplo (suma2)
> suma3 = \x -> x + 3

En Haskell, todas las funciones tienen un único argumento. Para definir funciones de más de un argumento se pueden utilizar dos posibilidades.
Mediante tuplas
Ejemplo (ft)
> ft = \(x,y) -> 2 * x + y
?-ft (3,4)10
Mediante curryficación.
Definición (currificación)
La currificación (currying) consiste en simular funcionesde varios argumentos mediante funciones de orden superior de un argumento
Ejemplo (fc)
La función fc toma un entero a y devuelve una función que cuando toma un entero b devuelve 2*a+b> fc :: Int -> (Int -> Int)
> fc = \a -> (\b -> 2 * a + b)
?-fc 3 410
En realidad, la precedencia de las declaraciones de tipos en Haskell hace innecesarios los paréntesis de la declaraciónanterior y La notación lambda puede simplificarse mediante encaje de patrones. Dicha definición podría reescribirse como:
Ejemplo (fc')
> fc' :: Int -> Int -> Int> fc' x y = 2 * x + y

Las definiciones mediante currificación son muy habituales en Haskell ya que, además de evitar paréntesis innecesarios, facilitan la aplicación parcial de funciones. De esa forma, la expresión fc 3tiene significado por sí misma.
?-reaplica (fc 3) 416
Nota: En Haskell, una expresión del tipo (+2) se denomina una sección y equivale a la aplicación parcial de la función correspondiente, en este caso (+)
Mediante composición de funciones. La composición de funciones es un recurso habitual en la definición de procesos iterativos. La función de composición, aunque está predefinida, podríadefinirse en Haskell como:
Ejemplo (comp)
> comp :: (b -> c) -> (a -> b) -> a -> c
> comp f g = \x -> f ( g x)

Ejemplo (fcm)
> fcm = comp (+3) (*4)

?-fcm 211
Nota: La función composición está predefinida como el operador (.).
Ejemplo (fcm')
La función fcm' equivale a la función fcm> fcm' = (+3) . (*4)

Encaje de patrones. Las definiciones defunciones pueden realizarse mediante una serie de ecuaciones. En cada ecuación pueden incluirse varios patrones que el sistema intenta encajar según el orden en que fueron escritos. En cuanto un patrón encaje, se devuelve el valor correspondiente.
Ejemplo (fact)
La función fact devuelve el factorial de un número.
> fact 0 = 1
> fact n = n * fact (n - 1)

?-fact 5120
Ecuaciones conguardas. En las definiciones pueden incluirse unas condiciones, denominadas . El sistema evalúa las guardas de cada ecuación. Si encuentra una guarda cuyo valor sea True, devuelve el resultado correspondiente.
Ejemplo (signo)
> signo x | x > 0 = 1
> | x == 0 = 0
> | otherwise = -1

Nota: La palabra reservada otherwise equivale a True
Declaraciones locales. En ladefinición de funciones es posible utilizar declaraciones locales que facilitan la legibilidad y la reusabilidad del código.
Ejemplo (cuboS)
La función cuboS calcula el cubo del siguiente de un número
> cuboS x = (x + 1) * (x + 1) * (x + 1)

Las declaraciones locales pueden introducirse mediante la combinación let x = ELocal in ExprEjemplo (cuboS1)
cuboS1 equivale a cuboS pero utiliza...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Documento
  • Documentos
  • Documentos
  • Documento
  • Documentos
  • Documento
  • Documentos
  • Documentos

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS