En ciencias de la computación, se dice que un lenguaje de programación tiene funciones de primera clase si trata las funciones como ciudadanos de primera clase. Esto significa que admite:

  • Poder pasar funciones como argumentos a otras funciones.
  • Que el valor de retorno de una función sea otra función.
  • Asignar funciones a variables o almacenarlas en estructuras de datos.[1]

Algunos teóricos de lenguajes de programación sugieren el requerimiento o soporte para funciones anónimas (funciones literales).[2]​ En lenguajes con funciones de primera clase, los nombres de las funciones no tienen ningún estatus especial; se tratan como variables ordinarias de tipo función .[3]​ El término fue acuñado por Christopher Strachey en el contexto de «funciones como ciudadanos de primera clase» a mediados de la década de 1960.[4]

Las funciones de primera clase son necesarias para el paradigma de programación funcional, en el que el uso de funciones de orden superior es una práctica estándar.

A la hora de implementar funciones de primera clase existen ciertas dificultades para pasar funciones como argumentos o devolverlas como resultados, especialmente en presencia de variables no locales introducidas en funciones anidadas y anónimas. Históricamente, estos se denominaron problemas de funarg, el nombre proviene de «function argument» (argumentos de la función).[5]​ En los primeros lenguajes de programación imperativos, estos problemas se evitaron al no admitir funciones como valores de retorno (por ejemplo, ALGOL 60, Pascal) u omitir funciones anidadas y, por lo tanto, variables no locales (p. ej. C ). Lisp, el primer lenguaje funcional, adoptó el enfoque de alcance dinámico, donde las variables no locales se refieren a la definición más cercana de esa variable en el punto donde se ejecuta la función, en lugar de donde se definió. El soporte adecuado para funciones de primera clase con alcance léxico se introdujo en Scheme y requiere el manejo de referencias a funciones como clausuras en lugar de simples punteros de función,[4]​ lo que a su vez hace necesaria la recolección de elementos no utilizados.

Notas

editar
  1. Abelson, Harold; Sussman, Gerald Jay (1984). Structure and Interpretation of Computer Programs. MIT Press. Formulating Abstractions with Higher-Order Procedures. ISBN 0-262-01077-1. Archivado desde el original el 21 de septiembre de 2021. Consultado el 16 de agosto de 2023. 
  2. Programming language pragmatics, by Michael Lee Scott, section 11.2 "Functional Programming".
  3. Roberto Ierusalimschy; Luiz Henrique de Figueiredo; Waldemar Celes (2005). «The Implementation of Lua 5.0». Journal of Universal Computer Science 11 (7): 1159-1176. doi:10.3217/jucs-011-07-1159. 
  4. a b Burstall, Rod; Strachey, Christopher (2000). «Understanding Programming Languages». Higher-Order and Symbolic Computation 13 (52): 11-49. Archivado desde el original el 16 de febrero de 2010. 
  5. Joel Moses. "The Function of FUNCTION in LISP, or Why the FUNARG Problem Should be Called the Environment Problem". MIT AI Memo 199, 1970.

Referencias

editar

📚 Artikel Terkait di Wikipedia

Programación genética

artificial, la programación genética (GP, de sus siglas en inglés: Genetic Programming) es una metodología basada en los algoritmos evolutivos e inspirada en

Diagrama de decisión binario

normal negativa (FNN) The Art of Computer Programming, vol 4A, Donald E. Knuth Graph-Based Algorithms for Boolean Function Manipulation, Randal E. Bryant

Función mayorante

Introduction to combinatorial algorithms and Boolean functions. The Art of Computer Programming. 4.0. Upper Saddle River, NJ: Addison-Wesley. pp. 64-74. ISBN 0-321-53496-4

Regla par-impar

van Dam, S. K. Feiner, and J. F. Hughes. Computer Graphics: Principles and Practice. The Systems Programming Series. Addison-Wesley, Reading, 2nd edition

D (lenguaje de programación)

declaración múltiple y una notación abreviada de expresiones simples:​ int function(int) g; g = (x) { return x * x; }; // forma larga g = (x) => x * x; //

Ordenamiento por mezcla

"Section 5.2.4: Sorting by Merging". Sorting and Searching. The Art of Computer Programming. 3 (2nd ed.). Addison-Wesley. pp. 158–168. ISBN 0-201-89685-0. Distintas

Recursión (ciencias de computación)

Programming: 4th International School, Oxford, UK: Springer, p. 108 .. Harold Abelson and Gerald Sussman: "Structure and Interpretation Of Computer Programs"

SAP R/3

Transporte Tecnología en Desarrollo ABAP Advanced Business Application Programming Transacciones frecuentes: SE38 Editor para escribir informes, module