Wyobraź sobie proste (składa się) Język, w którym funkcje wyglądać następująco:Czy istnieje związek między wywołaniem funkcji a instancją obiektu w czystych językach funkcjonalnych?
function f(a, b) = c + 42
where c = a * b
(mówią, że jest podzbiorem Lisp, który obejmuje „defun” i „daj”.)
wyobrazić również, że zawiera niezmienne obiektów, które wyglądają tak:
struct s(a, b, c = a * b)
Ponownie analogizing do Lisp (tym razem rozszerzeniem), powiedzmy definicja struct tak by wygenerować funkcje:
make-s(a, b)
s-a(s)
s-b(s)
s-c(s)
Teraz, biorąc pod uwagę prostą konfigurację, wydaje się jasne, że istnieje wiele podobieństw między tym, co dzieje się za kulisami, gdy użytkownik nazywa "f" lub "make-s". Po dostarczeniu "a" i "b" w czasie wywołania/utworzenia instancji, istnieje wystarczająca ilość informacji do obliczenia "c".
Można myśleć o utworzeniu struktury jako o nazwie wywołującej funkcję, a następnie przechowywaniu wynikowego środowiska symbolicznego do późniejszego użycia po wywołaniu wygenerowanych funkcji akcesora. Możesz też pomyśleć o ocenie wartości funkcji, która jest jak tworzenie ukrytej struktury, a następnie wykorzystywanie jej jako symbolicznego środowiska do oceny końcowego wyniku wyrażenia.
Czy mój model zabawek jest tak uproszczony, że jest bezużyteczny? A może jest to przydatny sposób myślenia o tym, jak działają prawdziwe języki? Czy są jakieś prawdziwe języki/implementacje, że ktoś bez tła CS, ale z zainteresowaniem w językach programowania (tj. Ja) powinien dowiedzieć się więcej o tym, aby zbadać tę koncepcję?
Dzięki.
EDYCJA: Dzięki za odpowiedzi do tej pory. Aby trochę się zastanowić, myślę, że zastanawiam się, czy istnieją prawdziwe języki, w których mówi się ludziom, którzy uczą się tego języka. "powinieneś pomyśleć o przedmiotach jako zasadniczo zamknięciach". Lub, jeśli istnieją jakieś rzeczywiste implementacje językowe, gdzie jest tak, że tworzenie wystąpienia obiektu i wywoływanie funkcji rzeczywiście mają wspólne częste (nietrywialne, to znaczy nie tylko wywołania biblioteki) kod lub struktury danych.
Czy analogia, którą robię, o której wcześniej słyszałem, wykracza głębiej niż zwykła analogia w rzeczywistych sytuacjach?
Cóż, z pewnością istnieje analogia. 'make-s' może być postrzegany jako fabryka, która z definicji jest funkcją. I rzeczywiście uznałem za interesujące, choć nie zbyt ważne dla mojego kodowania-fu, myślenie o metodach (w tym fabrykach/konstruktorach) jako funkcjach i zakresie funkcji jako symbolu (/ string) => odwzorowaniu wartości. Python wykonuje oba. +1, ponieważ uwielbiam takie rzeczy. – delnan
Podobne informacje: http://stackoverflow.com/questions/2497801/closures-are-poor-mans--pjects-and-vice-versa-what-does-this-mean – missingfaktor