Есть ли связь между вызовом функции и созданием экземпляра объекта на чисто функциональных языках?

Представьте себе простой (составленный) язык, в котором функции выглядят как :

function f(a, b) = c + 42
    where c = a * b

(Скажем, это подмножество Лиспа, которое включает 'defun' и 'let'.)

Также представьте, что оно включает неизменяемые объекты, которые выглядят так:

struct s(a, b, c = a * b)

Опять же, по аналогии с Лиспом (на этот раз надмножеством), скажем, определение структуры, подобное этому, будет генерировать функции для:

make-s(a, b)
s-a(s)
s-b(s)
s-c(s)

Теперь, учитывая простую настройку, кажется очевидным, что есть много общего между тем, что происходит за сцены, когда вы либо называете «f», либо «make-s». После того, как 'a' и 'b' предоставлены во время вызова / создания экземпляра, имеется достаточно информации для вычисления 'c'.

Вы можете думать о создании экземпляра структуры как о вызове функции с последующим сохранением результирующего символического окружение для последующего использования при вызове сгенерированных функций доступа. Или вы можете думать о вычислении функции как о создании скрытой структуры с последующим использованием ее в качестве символической среды для оценки конечного результата выражения.

Моя игрушечная модель настолько упрощена, что она « бесполезно? Или это действительно полезный способ подумать о том, как работают настоящие языки? Существуют ли какие-либо реальные языки / реализации, о которых кому-то без опыта работы в CS, но интересующемуся языками программирования (например, мне) следует узнать больше, чтобы изучить эту концепцию?

Спасибо.

EDIT: Спасибо за ответы, так что далеко. Вкратце, я думаю, что меня интересует, существуют ли какие-либо реальные языки, в которых людям, изучающим язык, говорят, например, «вы должны думать об объектах как о замыканиях». Или, если есть какие-либо реальные языковые реализации, в которых создание экземпляра объекта и вызов функции на самом деле имеют общий (нетривиальный, т.е. не только вызовы библиотеки) код или структуры данных.

Проводит ли я аналогию , что, как я знаю, раньше делали другие, пойти дальше простой аналогии в реальных ситуациях?

6
задан jtolle 22 September 2010 в 19:46
поделиться