llamada-con-continuación-actual



En el lenguaje de programación informática Scheme , la subrutina o función call-with-current-continuation , abreviada call/cc , se utiliza como operador de flujo de control . Ha sido adoptado por varios otros lenguajes de programación.

Tomando una función fcomo su único argumento, (call/cc f)dentro de una expresión se aplica a la continuación actual de la expresión. Por ejemplo ((call/cc f) e2)es equivalente a aplicar fa la continuación actual de la expresión. La continuación actual se obtiene reemplazándola (call/cc f)por una variable climitada por una abstracción lambda, por lo que la continuación actual es (lambda (c) (c e2)). Aplicarle la función fda el resultado final (f (lambda (c) (c e2))).

Como ejemplo complementario, en una expresión (e1 (call/cc f)), la continuación de la subexpresión (call/cc f)es (lambda (c) (e1 c)), por lo que la expresión completa es equivalente a (f (lambda (c) (e1 c))). En otras palabras, toma una "instantánea" del contexto de control actual o del estado de control del programa como un objeto y se aplica fa él. El objeto de continuación es un valor de primera clase y se representa como una función, con la aplicación de función como su única operación. Cuando se aplica un objeto de continuación a un argumento, la continuación existente se elimina y la continuación aplicada se restaura en su lugar, de modo que el flujo del programa continuará en el punto en el que se capturó la continuación y el argumento de la continuación .luego se convierte en el "valor de retorno" de la invocación call/cc. Las continuaciones creadas con call/cc pueden llamarse más de una vez, e incluso desde fuera de la extensión dinámica de la aplicación call/cc.

En informática, hacer que este tipo de estado de programa implícito sea visible como un objeto se denomina cosificación . ( Scheme no distingue sintácticamente entre aplicar continuaciones o funciones).

Con call/cc, se puede implementar una variedad de operadores de control complejos desde otros lenguajes a través de unas pocas líneas de código, por ejemplo, el operador de McCarthy para elección no determinista , retroceso estilo Prolog , corrutinas estilo Simula 67 y generalizaciones de las mismas, estilo Icon generadores , o motores y subprocesos o incluso el oscuro COMEFROM [ cita requerida ] .amb

Como se muestra en el siguiente ejemplo, call/cc se puede usar para emular la función de la declaración de devolución conocida de los lenguajes de estilo C , que falta en Scheme :