En informática , el operador J de Peter Landin es una construcción de programación que poscompone una expresión lambda con la continuación del contexto lambda actual. La "función" resultante es de primera clase y se puede pasar a funciones posteriores, donde, si se aplica, devolverá su resultado a la continuación de la función en la que se creó.
Historia
El operador J fue creado para hacer etiquetas y saltar un valor de primera clase. Fue diseñado para funcionar con la máquina SECD con las siguientes transiciones adicionales:
El operador J creó originalmente lo que se llamó "cierre de programa", que constaba de una función llamada cuerpo y un estado SECD llamado volcado. Un cierre de programa equivale a componer su cuerpo con el volcado en forma de continuación ( cierre ( f , D )( x) = D ( f ( x ))).
Descripción simplificada
El operador J compone una función con la continuación de la función que llama. Es decir, el operador J devuelve una función, que cuando se aplica aplica el argumento del operador J con el argumento de la función, y luego fuerza a la función que llamó al operador J a devolver ese valor.
Ejemplos
J( λx.x ) es equivalente a una declaración de devolución de primera clase. Esto se debe a que λx.x es la función de identidad, por lo que cuando se aplica no hará nada con el valor dado y lo devuelve de inmediato.
λv. J( λx.x ) inicialmente devuelve el J de λx.x , pero eso podría usarse en una expresión circundante para que vuelva a devolver un valor diferente.
Ver también
Referencias
- Por Landín
- Landin, PJ (enero de 1964). "La evaluación mecánica de las expresiones". Computadora. J. 6 (4): 308–320. doi : 10.1093/comjnl/6.4.308 .
- Landin, PJ (febrero de 1965). "Correspondencia entre ALGOL 60 y la notación Lambda de Church: Parte I". Com. ACM . 8 (2): 89-101. doi : 10.1145/363744.363749 . S2CID 6505810.
- Landin, PJ (marzo de 1965). "Una correspondencia entre ALGOL 60 y las notaciones Lambda de Church: Parte II". Com. ACM . 8 (3): 158–167. doi : 10.1145/363791.363804 . S2CID 15781851.
- Landin, PJ, "Una descripción formal de Algol 60". Presentado en la Conferencia de Trabajo IFIP, Baden, septiembre de 1964.
- Landin, PJ, “Programación sin imperativos: un ejemplo”, Informe de investigación de UNIVAC SP (marzo de 1965)
- Landin, PJ, “Getting Rid of Labels”, Informe de investigación de UNIVAC SP (julio de 1965)
- Landin, PJ, “An Analysis of Assignment in Programming Languages”, Informe de investigación de UNIVAC SP (septiembre de 1965)
- Landin, PJ, “Una generalización de saltos y etiquetas”, math.bas.bg (1998)
- Por otros
- Thielecke, H. (diciembre de 1998). "Introducción a Landin" Una generalización de saltos y etiquetas"" (PDF) . Computación simbólica y de orden superior . 11 (2): 117–123. doi :10.1023/A:1010060315625. S2CID 1562780.
- Danvy, O .; Millikin, K. (noviembre de 2008). Tennent, Robert (ed.). "Una deconstrucción racional de la máquina SECD de Landin con el operador J". Métodos lógicos en informática . 4 (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 es para JavaScript: una correspondencia de estilo directo entre lenguajes similares a Algol y JavaScript utilizando continuaciones de primera clase" (PDF) . Idiomas de dominio específico . LNCS . vol. 5658, págs. 1-19. doi : 10.1007/978-3-642-03034-5_1 . ISBN 978-3-642-03033-8. Archivado desde el original (PDF) el 18 de agosto de 2010 . Consultado el 19 de septiembre de 2009 .