Stellen Sie sich eine einfache (aus) Sprache, wo Funktionen wie folgt aussehen:Gibt es eine Beziehung zwischen dem Aufruf einer Funktion und der Instanziierung eines Objekts in reinen funktionalen Sprachen?
function f(a, b) = c + 42
where c = a * b
(Sag es eine Teilmenge von Lisp ist die ‚defun‘ und ‚lassen‘ enthält.)
auch vorstellen, dass es unveränderlich enthält Objekte, die wie folgt aussehen: zu Lisp
struct s(a, b, c = a * b)
Again (eine Ober dieser Zeit) Analogisierung, sagen eine Struktur Definition wie das generieren würde Funktionen für:
make-s(a, b)
s-a(s)
s-b(s)
s-c(s)
Jetzt, angesichts der einfachen Einrichtung, scheint es klar zu sein, dass es viel Ähnlichkeit gibt zwischen dem, was hinter den Kulissen passiert, wenn man entweder 'f' oder 'make-s' nennt. Sobald 'a' und 'b' zum Zeitpunkt des Aufrufens/Instanziierens bereitgestellt werden, gibt es genügend Information zum Berechnen von 'c'.
Sie könnten sich vorstellen, eine Struktur so zu instanziieren, als ob sie eine Funktion aufruft, und dann die resultierende symbolische Umgebung zur späteren Verwendung speichert, wenn die generierten Accessor-Funktionen aufgerufen werden. Oder Sie könnten eine Funktion als eine Art "hidden struct" bezeichnen und dann als die symbolische Umgebung verwenden, mit der der endgültige Ergebnisausdruck bewertet werden soll.
Ist mein Spielzeugmodell so übermäßig vereinfacht, dass es nutzlos ist? Oder ist es eine hilfreiche Möglichkeit, darüber nachzudenken, wie echte Sprachen funktionieren? Gibt es echte Sprachen/Implementierungen, bei denen jemand ohne CS-Hintergrund, aber mit Interesse an Programmiersprachen (d. H. Ich), mehr darüber lernen sollte, um dieses Konzept zu erforschen?
Danke.
EDIT: Danke für die Antworten bisher. Um ein wenig zu erläutern, ich denke, was ich mich wundere, ist, wenn es irgendwelche echten Sprachen gibt, in denen Leute, die die Sprache lernen, z. "Sie sollten Objekte als im Wesentlichen Verschlüsse denken". Oder, wenn es reale Sprachimplementierungen gibt, wo der Fall, dass ein Objekt instanziiert wird und eine Funktion aufruft, tatsächlich einige gemeinsame (nicht-triviale, d. H. Nicht nur Bibliotheksaufrufe) Code- oder Datenstrukturen aufweist.
Hat die Analogie, die ich kenne, die ich vorher schon einmal gemacht habe, in jeder realen Situation tiefer als eine bloße Analogie?
Nun, es gibt sicherlich eine Analogie. 'make-s' könnte als Fabrik gesehen werden, die definitionsgemäß eine Funktion ist. Und ich fand es zwar interessant, wenn auch nicht zu relevant für meine Kodierung-fu, über Methoden (einschließlich Fabriken/Konstruktoren) als Funktionen und den Anwendungsbereich einer Funktion als Symbol (/ string) => Wertemapping nachzudenken. Python macht beides. +1, weil ich solche Dinge liebe. – delnan
Art von verwandten: http://stackoverflow.com/questions/2497801/closures-are-poor-mands-objects-and-vice-versa-what-does-this-mean – missingfaktor