En matemáticas , la aplicación (o evaluación ) de una función es el acto de tomar una función y una entrada de su dominio para obtener el valor correspondiente de su rango . En este sentido, la aplicación de una función puede considerarse como lo opuesto a la abstracción de una función . [ 1 ]
Es fundamental para los lenguajes de programación derivados del cálculo lambda , como LISP y Scheme , y también para los lenguajes funcionales . Desempeña un papel importante en el estudio de la semántica denotacional de los programas informáticos, ya que es una función continua en órdenes parciales completos . La aplicación de funciones también es una función continua en la teoría de la homotopía y, de hecho, sustenta toda la teoría: permite que una deformación homotópica se vea como una trayectoria continua en el espacio de funciones. Del mismo modo, las mutaciones válidas (refactorizaciones) de programas informáticos pueden considerarse como aquellas que son "continuas" en la topología de Scott .
Representación
La aplicación de una función se suele representar yuxtaponiendo la variable que representa la función con su argumento entre paréntesis . Por ejemplo, la siguiente expresión representa la aplicación de la función ƒ a su argumento x .
En algunos casos, se utiliza una notación diferente donde no se requieren paréntesis, y la aplicación de la función puede expresarse simplemente por yuxtaposición . Por ejemplo, la siguiente expresión puede considerarse igual que la anterior:
Esta última notación es especialmente útil en combinación con el isomorfismo de currificación . Dada una función, su aplicación se representa comopor la notación anterior y(ocon el argumentoescrito con los corchetes angulares menos comunes) por este último. Sin embargo, las funciones en forma currificadapueden representarse yuxtaponiendo sus argumentos:, en vez deEsto depende de que la aplicación de la función sea asociativa por la izquierda .
Cuando la notación matemática se representa en un documento digital, los caracteres Unicode invisibles de ancho cero U+2061 FUNCTION APPLICATION y U+2062 INVISIBLE TIMES se pueden utilizar para distinguir la concatenación que significa aplicación de función de la concatenación que significa multiplicación.
Como operador
La aplicación de funciones se puede definir como un operador , llamado aplicar o, según la siguiente definición:
El operador también puede denotarse mediante una comilla invertida (`).
Si se entiende que el operador tiene baja precedencia y es asociativo por la derecha , el operador de aplicación se puede utilizar para reducir la cantidad de paréntesis necesarios en una expresión. Por ejemplo;
se puede reescribir como:
Esto puede expresarse de forma equivalente utilizando la composición de funciones como:
o incluso:
si uno consideraser una función constante que devuelve.
teoría de conjuntos
En la teoría axiomática de conjuntos , especialmente en la teoría de conjuntos de Zermelo-Fraenkel , una funcióna menudo se define como una relación () teniendo la propiedad de que, para cualquierhay una únicade tal manera que.
Normalmente uno no se conforma con escribir ""para especificar quey normalmente desea la notación de función más común "" . Aplicación de la función, o más específicamente, la notación "", no está presente en la signatura habitual de la teoría de conjuntos, pero puede agregarse a la teoría como un símbolo de función binaria.si se desea sin ninguna pérdida de expresividad definiendo: [ 2 ]
O, más formalmente: [ 3 ] [ 4 ]
dóndedenota la exponenciación de conjuntos : el conjunto de todas las funciones dea.
En prosa:si existe un dominioy gamade tal manera quees una función deay; o (la negación de lo anterior) yLa elección de utilizar el conjunto vacíocuandono está definido es arbitrario para asegurar que la notación definida para todo el dominio del discurso . [ 5 ]
Sidenota la fórmula del lado derecho de la bicondicional anterior, para cualesquiera dos conjuntos,la fórmulaasocia un objeto único:Por lo tanto, el lenguaje de la teoría de conjuntos puede utilizar una extensión por definición para incluir la operación de aplicación de funciones.conservadoramente .
Programación
En programación informática, la aplicación de funciones a menudo se refiere a la llamada o ejecución de un procedimiento, en lugar de una verdadera función matemática (véase funciones en programación informática ), con reglas similares para su comportamiento.
La aplicación de funciones corresponde a la reducción beta en el cálculo lambda .
Aplicar función
En relación con el operador apply, la función apply aplica una función a una lista variable de argumentos. Eval y apply son los dos componentes interdependientes del ciclo eval-apply en Lisp, descrito en SICP . [ 6 ] Esto es compatible con lenguajes que utilizan funciones variádicas , ya que es la única forma de llamar a una función con un número indeterminado (en tiempo de compilación) de argumentos.
Common Lisp y Scheme
En Common Lisp, apply es una función que aplica una función a una lista de argumentos (nótese aquí que "+" es una función variádica que acepta cualquier número de argumentos):
( aplicar #' + ( lista 1 2 ))De forma similar en Scheme:
( aplicar + ( lista 1 2 ))C++
En C++ , Bind [ 7 ] se utiliza ya sea a través del espacio de nombres std o a través del espacio de nombres boost.
C# y Java
En C# y Java , los argumentos variádicos se agrupan en un array. El llamador puede pasar explícitamente un array en lugar de los argumentos variádicos. Esto solo es posible para un parámetro variádico. No es posible aplicar un array de argumentos a un parámetro no variádico sin usar reflexión . Surge una ambigüedad si el llamador quiere pasar el array como uno de los argumentos en lugar de usarlo como una lista de argumentos. En este caso, el llamador debe convertir el array a Objectpara evitar que el compilador use la interpretación apply .
variadicFunc ( arrayOfArgs );Con la versión 8 se introdujeron las expresiones lambda. Las funciones se implementan como objetos con una interfaz funcional, una interfaz con un solo método no estático. La interfaz estándar
Función < T , R >Consta del método (más algunas funciones de utilidad estáticas):
R aplicar ( T para )Ir
En Go , los argumentos variádicos tipados se agrupan en una porción. El llamador puede pasar explícitamente una porción en lugar de los argumentos variádicos, agregando un ...argumento a la porción. Esto solo es posible para un parámetro variádico. El llamador no puede aplicar una matriz de argumentos a parámetros no variádicos sin usar reflexión.
s := [] cadena { "foo" , "bar" } variadicFunc ( s ... )JavaScript
En JavaScript , los objetos de función tienen un applymétodo, el primer argumento es el valor de la thispalabra clave dentro de la función; el segundo es la lista de argumentos:
func.apply ( null , args ) ;ES6 agrega el operador de propagación func(...args)[ 8 ] que puede usarse en lugar de apply.
Lua
En Lua , apply se puede escribir de esta manera:
función aplicar ( f ,...) devolver f (...) finPerl
En Perl , los arrays, hashes y expresiones se "aplanan" automáticamente en una sola lista cuando se evalúan en un contexto de lista, como en la lista de argumentos de una función.
# Llamadas a subrutinas equivalentes: @args = ( @some_args , @more_args ); func ( @args );func ( @some_args , @more_args );PHP
En PHP , applyse llama call_user_func_array:
call_user_func_array ( 'func_name' , $args );Python y Ruby
En Python y Ruby , la misma notación de asteriscos que se usa para definir funciones variádicas se usa para llamar a una función en una secuencia y en un array, respectivamente:
función ( * argumentos )Python originalmente tenía una función apply, pero esta fue descontinuada en favor del asterisco en la versión 2.3 y eliminada en la versión 3.0. [ 9 ]
R
En R , do.callconstruye y ejecuta una llamada a función a partir de un nombre o una función y una lista de argumentos que se le pasarán:
f ( x1 , x2 ) # también se puede realizar a través de do.call ( what = f , args = list ( x1 , x2 ))Charla informal
En Smalltalk , los objetos de bloque (función) tienen un valueWithArguments:método que toma un array de argumentos:
unBlock valorConArgumentos: argsTcl
Desde Tcl 8.5, [ 10 ] se puede aplicar una función a los argumentos con el applycomando
¿Aplicar función ? arg1 arg2 ... ?donde la función es una lista de dos elementos {args body} o una lista de tres elementos {args body namespace}.
Propiedad universal
Consideremos una función, eso es,donde la notación de corchetesdenota el espacio de funciones de A a B. Mediante la currificación , existe una única función. Luego, Apply proporciona el morfismo universal
- ,
de modo que
o, equivalentemente, se tiene el diagrama de conmutación
Más precisamente, curry y apply son functores adjuntos .
La notaciónpara el espacio de funciones de A a B ocurre más comúnmente en ciencias de la computación. Sin embargo, en teoría de categorías ,se conoce como el objeto exponencial y se escribe comoTambién existen otras diferencias de notación comunes; por ejemplo, Apply a menudo se denomina Eval , [ 11 ] aunque en ciencias de la computación, no son lo mismo, distinguiéndose eval de Apply , ya que es la evaluación de la forma de cadena entre comillas de una función con sus argumentos, en lugar de la aplicación de una función a algunos argumentos.
Además, en la teoría de categorías, el curry se suele denotar por, de modo queestá escrito para curry ( g ). Esta notación está en conflicto con el uso deen el cálculo lambda , donde lambda se usa para denotar variables ligadas. Con todos estos cambios de notación considerados, la adjunción de Apply y curry se expresa entonces en el diagrama conmutativo

Los artículos sobre objetos exponenciales y categorías cartesianas cerradas ofrecen una discusión más precisa de la formulación categórica de esta idea. Por lo tanto, el uso de lambda aquí no es accidental; el lenguaje interno de las categorías cartesianas cerradas es simplemente cálculo lambda tipado . El entorno más general posible para Apply son las categorías monoidales cerradas , de las cuales las categorías cartesianas cerradas son un ejemplo. En álgebra homológica , la adjunción de curry y apply se conoce como adjunción tensorial-hom .
Propiedades topológicas
En la teoría del orden , en la categoría de órdenes parciales completos dotados de la topología de Scott , tanto `curry` como `apply` son funciones continuas (es decir, son continuas de Scott ). [ 12 ] Esta propiedad ayuda a establecer la validez fundamental del estudio de la semántica denotacional de los programas informáticos.
En geometría algebraica y teoría de homotopía , curry y apply son funciones continuas cuando el espaciode funciones continuas dease le da la topología abierta compacta yes localmente compacto de Hausdorff . Este resultado es muy importante, ya que sustenta la teoría de la homotopía, permitiendo que las deformaciones homotópicas se entiendan como trayectorias continuas en el espacio de funciones.
Otros casos
La correspondencia Curry-Howard relaciona la aplicación de funciones con la regla lógica del modus ponens .
Véase también
Referencias
- ↑ Alama, Jesse; Korbmacher, Johannes (2023), "El cálculo lambda" , en Zalta, Edward N.; Nodelman, Uri (eds.), La enciclopedia de filosofía de Stanford ( edición de invierno de 2023), Laboratorio de Investigación en Metafísica, Universidad de Stanford , consultado el 29 de febrero de 2024.
- ↑ Mendelson, Elliott (2015). Introducción a la lógica matemática (6.ª ed.). CRC Press . págs. 102–103 , 231, 235, 245–246 . ISBN 978-1-4822-3778-8.
- ↑ Suppes, Patrick (1972). Teoría axiomática de conjuntos . Archivo de Internet. Nueva York, Dover Publications. pág. 87. ISBN 978-0-486-61630-8.
- ^ Levy, Azriel (1979). Teoría básica de conjuntos . Berlina; Nueva York: Springer-Verlag. pag. 27.ISBN 978-0-387-08417-6.
- ^ Levy, Azriel (1979). Teoría básica de conjuntos . Berlina; Nueva York: Springer-Verlag. pag. 15.ISBN 978-0-387-08417-6.
- ↑ Harold Abelson, Gerald Jay Sussman, Julie Sussman, Estructura e interpretación de programas informáticos , (1996) MIT Press, ISBN 0-262-01153-0Véase la Sección 4.1, El Evaluador Metacircular .
- ↑ "Boost: Documentación de Bind.HPP - 1.49.0" .
- ↑ "Sintaxis de propagación - JavaScript | MDN" . Consultado el 20 de abril de 2017 .
- ↑ "Funciones integradas no esenciales" . Referencia de la biblioteca de Python . 8 de febrero de 2005. Consultado el 19 de mayo de 2013 .
- ↑ "aplicar" . Documentación de Tcl . 2006. Consultado el 23 de junio de 2014 .
- ↑ Saunders Mac Lane , Teoría de categorías
- ↑ HP Barendregt, The Lambda Calculus , (1984) ISBN de Holanda Septentrional 0-444-87508-5
- Funciones y asignaciones
- functores adjuntos
- Cálculo lambda
- Programación funcional
- Funciones de orden superior