В информатике оператор J Питера Ландина — это программная конструкция, которая посткомпозирует лямбда - выражение с продолжением в текущий лямбда-контекст. Полученная «функция» является первоклассной и может быть передана последующим функциям, где при применении она вернет свой результат в продолжение функции, в которой она была создана.
История
Оператор J был создан для того, чтобы сделать метки и переходы первоклассными значениями. Он был разработан для работы с машиной SECD со следующими дополнительными переходами:
Переход
От
К
Дж.
J : f : S , E , ap : C , D
закрытие ( f , D ): S , E , C , D
Закрытие
закрытие ( f , ( S' , E' , C' , D' )): x : S , E , ap : C , D
f : x : S' , E' , ap : C' , D'
Оператор J изначально создал то, что называлось «замыканием программы», состоящее из функции, называемой телом, и состояния SECD, называемого дампом. Замыкание программы эквивалентно составлению ее тела с дампом в форме продолжения ( замыкание ( f , D )( x) = D ( f ( x )) ).
Упрощенное описание
Оператор J составляет функцию с продолжением вызывающей функции. То есть оператор J возвращает функцию, которая при применении применяет аргумент оператора J к аргументу функции, а затем заставляет функцию, вызвавшую оператор J, вернуть это значение.
Примеры
J( λx.x ) эквивалентен оператору возврата первого класса. Это потому, что λx.x является функцией тождества, поэтому при применении она ничего не делает с заданным значением и сразу возвращает его.
λv. J( λx.x ) изначально возвращает J из λx.x , но это можно использовать в окружающем выражении, чтобы заставить его повторно вернуть другое значение.
Danvy, O. ; Millikin, K. (ноябрь 2008 г.). Tennent, Robert (ред.). "Рациональная деконструкция машины SECD Ландина с оператором J". Logical Methods in Computer Science . 4 (12): 1– 67. arXiv : 0811.3231 . doi :10.2168/LMCS-4(4:12)2008. S2CID 7926360.
Danvy, O. ; Shan, CC; Zerny, I. (2009). "J Is for JavaScript: A Direct-Style Correspondence between Algol-Like Languages and JavaScript Using First-Class Continuations" (PDF) . Предметно-ориентированные языки . LNCS . Том 5658. стр. 1– 19. doi : 10.1007/978-3-642-03034-5_1 . ISBN978-3-642-03033-8. Архивировано из оригинала (PDF) 2010-08-18 . Получено 2009-09-19 .