operator J
W informatyce operator J Petera Landina jest konstrukcją programistyczną, która tworzy wyrażenie lambda z kontynuacją bieżącego kontekstu lambda . Powstała „funkcja” jest pierwszorzędna i może być przekazywana do kolejnych funkcji, gdzie zastosowana zwróci swój wynik do kontynuacji funkcji, w której została utworzona.
Historia
Operator J został stworzony, aby etykiety i skoki były wartościami pierwszej klasy. Został zaprojektowany do pracy z maszyną SECD z następującymi dodatkowymi przejściami:
Przemiana | Z | Do |
---|---|---|
J | J : f : S , E , ap : C , D | domknięcie ( fa , re ): S , mi , do , re |
Zamknięcie | zamknięcie ( fa , ( S' , E' , C' , D' )): x : S , mi , ap : do , re | f : x : S' , E' , ap : C' , D' |
Operator J pierwotnie stworzył tak zwane „zamknięcie programu”, składające się z funkcji zwanej treścią i stanu SECD zwanego zrzutem. Zamknięcie programu jest równoznaczne ze złożeniem jego ciała ze zrzutem w postaci kontynuacji ( closed ( f , D )( x) = D ( f ( x )) ).
Uproszczony opis
Operator J tworzy funkcję z kontynuacją funkcji wywołującej. Oznacza to, że operator J zwraca funkcję, która po zastosowaniu stosuje argument operatora J z argumentem funkcji, a następnie zmusza funkcję, która wywołała operatora J, do zwrócenia tej wartości.
Przykłady
J( λx.x ) jest odpowiednikiem instrukcji return pierwszej klasy. Dzieje się tak, ponieważ λx.x jest funkcją identyczności, więc kiedy zostanie zastosowana, nie zrobi nic z podaną wartością i natychmiast ją zwróci.
λv. J( λx.x ) początkowo zwraca J z λx.x , ale można tego użyć w otaczającym wyrażeniu, aby ponownie zwróciło inną wartość.
Zobacz też
- By Landin
- Landin, PJ (styczeń 1964). „Mechaniczna ocena wyrażeń” . Oblicz. J. 6 (4): 308–320. doi : 10.1093/comjnl/6.4.308 .
- Landin, PJ (luty 1965). „Korespondencja między ALGOL 60 a notacją Lambda Kościoła: część I” . Kom. ACM . 8 (2): 89–101. doi : 10.1145/363744.363749 . S2CID 6505810 .
- Landin, PJ (marzec 1965). „Korespondencja między ALGOL 60 a notacjami Lambda Kościoła: część II” . Kom. ACM . 8 (3): 158–167. doi : 10.1145/363791.363804 . S2CID 15781851 .
- Landin, PJ, „Formalny opis Algola 60”. Przedstawiono na konferencji roboczej IFIP w Badenii, wrzesień 1964 r.
- Landin, PJ, „Programowanie bez imperatywów — przykład”, raport badawczy UNIVAC SP (marzec 1965)
- Landin, PJ, „Getting Rid of Labels”, raport badawczy UNIVAC SP (lipiec 1965)
- Landin, PJ, „Analiza przypisania w językach programowania”, raport badawczy UNIVAC SP (wrzesień 1965)
- Landin, PJ, „Uogólnienie skoków i etykiet”, math.bas.bg (1998)
- Przez innych
- Thielecke, H. (grudzień 1998). „Wprowadzenie do „Uogólnienia skoków i etykiet” Landina „ ” (PDF) . Obliczenia wyższego rzędu i symboliczne . 11 (2): 117–123. doi : 10.1023/A:1010060315625 . S2CID 1562780 .
- Danvy, O .; Millikin, K. (listopad 2008). Tennent, Robert (red.). „Racjonalna dekonstrukcja maszyny SECD Landina z operatorem J”. Metody logiczne w informatyce . 4 (4:12): 1–67. ar Xiv : 0811.3231 . doi : 10.2168/LMCS-4(4:12)2008 . S2CID 7926360 .
- Danvy, O .; Shan, CC; Zerny, I. (2009). „J jest dla JavaScript: bezpośrednia korespondencja między językami algolopodobnymi a JavaScript przy użyciu pierwszorzędnych kontynuacji” (PDF) . Języki specyficzne dla domeny . LNCS . Tom. 5658. s. 1–19. doi : 10.1007/978-3-642-03034-5_1 . ISBN 978-3-642-03033-8 . Zarchiwizowane od oryginału (PDF) w dniu 18.08.2010 . Źródło 2009-09-19 .