imaginar un lenguaje sencillo (compuesta) donde las funciones se ven como:¿Existe una relación entre llamar a una función e instanciar un objeto en lenguajes funcionales puros?
function f(a, b) = c + 42
where c = a * b
(dicen que es un subconjunto de Lisp que incluye 'defun' y 'dejar'.)
también imaginar que incluye inmutable objetos que se parecen:
struct s(a, b, c = a * b)
una vez más una analogía a Lisp (esta vez un superconjunto), según una definición de esa estructura generaría funciones para:
make-s(a, b)
s-a(s)
s-b(s)
s-c(s)
Ahora, dada la configuración simple, parece claro que hay mucha similitud entre lo que sucede entre bastidores cuando llamas 'f' o 'make-s'. Una vez que 'a' y 'b' se suministran en el momento de la llamada/instancia, hay suficiente información para calcular 'c'.
Se podría pensar en crear instancias de una estructura como llamar a una función y luego almacenar el entorno simbólico resultante para su uso posterior cuando se invocan las funciones de acceso generadas. O podría pensar en una función de evaluación como crear una estructura oculta y luego usarla como el entorno simbólico con el cual evaluar la expresión del resultado final.
¿Está mi modelo de juguete tan simplificado que es inútil? ¿O es realmente una forma útil de pensar cómo funcionan los lenguajes reales? ¿Hay alguna lengua/implementación real que alguien sin experiencia en CS pero con un interés en los lenguajes de programación (es decir, yo) deba aprender más sobre esto para explorar este concepto?
Gracias.
EDIT: Gracias por las respuestas hasta ahora. Para elaborar un poco, creo que lo que me pregunto es si hay algún idioma real en el que las personas que están aprendiendo el idioma sepan, por ejemplo. "Deberías pensar en objetos como esencialmente cierres". O si hay implementaciones de lenguaje real donde el caso de instanciar un objeto y llamar a una función realmente comparte algunas estructuras de datos o códigos comunes (no triviales, es decir, no solo llamadas de biblioteca).
¿La analogía que estoy haciendo, que sé que otros han hecho antes, va más allá de la mera analogía en cualquier situación real?
Bueno, ciertamente hay una analogía. 'make-s' podría verse como fábrica, que es por definición una función. Y, de hecho, me pareció interesante, aunque no demasiado relevante para mi codificación-fu, pensar en métodos (incluidas fábricas/constructores) como funciones y el alcance de una función como un símbolo (/ cadena) => asignación de valores. Python hace ambas cosas. +1 porque me encanta en tales cosas. – delnan
tipo de temas relacionados: http://stackoverflow.com/questions/2497801/closures-are-poor-mans-objects-and-vice-versa-what-does-this-mean – missingfaktor