Concepto de funcion

De Uqbar wiki

Como su nombre lo indica, la función es el concepto fundamental del paradigma funcional: mientras que, por ejemplo, en el paradigma de objetos, los problemas se resuelven en términos de envío de mensajes entre objetos, en funcional los programas se estructurarán en torno a aplicación de funciones sobre valores. La función, es así, pues, la computación característica del paradigma.

Enfoques

Función como caja negra

Una forma simple de pensar una función es como una máquina con una salida y al menos una entrada, capaz de producir un resultado. Decimos que se trata de una caja negra, porque para aquel que la use no tiene acceso al interior de la misma, sino tan solo a sus entradas y salida. Esto nos lleva a que las funciones pueden ser combinadas fácilmente, de diversas formas, tan solo conociendo el tipo de entradas y salidas que posee.

Función como transformación matemática

Las funciones, sin embargo, no son simples cajas negras, que podrían, por ejemplo, tener memoria de sus entradas anteriores, sino que son transformaciones matemáticas que presentan transparencia referencial.

En particular, las funciones son relaciones que presentan las siguientes características:

Función desde un punto de vista imperativo

Al llevar los conceptos de función matemática al mundo computacional, la transparencia referencial implica que las funciones, comparadas contra los procedimientos imperativos, no tienen efecto, su aplicación no afecta al contexto, o, cuando menos, no es visible para el observador que evalua la expresión.

Si bien no tiene sentido hablar de mutabilidad en el contexto matemático, dado que solo se manejan valores y no referencias (al menos, en un enfoque simplista), la transparencia referencial en los programas construidos en el paradigma funcional tiene dos consecuencias mas o menos evidentes:

Función como un TAD

Las funciones currificadas, en tanto valores, pueden ser también pensandas como un TAD, para el cual:

Función desde el cálculo lambda

Desde el punto de vista del cálculo lambda, la función es una primitiva del lenguaje, y todas las funciones son anónimas, es decir, son expresiones lambda. Por lo que la función siguiente, que en Haskell normalmente escribiríamos:

siguiente x = x + 1

En cálculo lambda no tipado la escribiríamos:

siguiente = 𝛌x.sum x one

Equivalente a la siguiente definición Haskell:

siguiente = \x -> x + 1

Funciones en Haskell

Las funciones en Haskell presentan todas las carecterísticas mencionadas anteriormente. A modo de resumen, decimos que:

Latest update on July 17, 2017 by GitHub