Pregunta

¿Alguien sabe si call/cc se puede implementar con lambdas solo y cierres?

Parece que las interrupciones call/cc flujo del programa (como una excepción), pero lambdas y cierres no puede hacer eso. Por lo tanto creo que call/cc no se puede implementar a través de lambdas y cierres.

¿Alguna idea más?

¿Fue útil?

Solución

La cuestión no es particularmente claro, ya que lo que hace exactamente "implementado con lambdas y cierres sólo" media?

En cualquier caso, las continuaciones se puede utilizar en cualquier idioma con cierres escribiendo manualmente en href="http://en.wikipedia.org/wiki/Continuation_passing_style" pasando estilo . A continuación, la traducción automática en esta forma se puede implementar mediante la extensión del compilador, que normalmente permiten Lisps en el nivel de usuario a través de macros. Por ejemplo, véase CL-cont , una librería que implementa continuaciones de Common Lisp, que es una lenguaje que no los tenga incorporada.

continuaciones generalizadas eficientes como en el Esquema es probable que se implementa en un nivel más bajo que trata directamente con la pila del programa, pero esto no es un requisito, sólo una optimización.

Otros consejos

En el esquema se puede aplicar usando call/cc lambdas al convertir a continuación pasando estilo (CPS). Al convertir en CPS, cada ocurrencia de call/cc puede ser sustituido por el siguiente equivalentes:

(lambda (f k) (f (lambda (v k0) (k v)) k))

donde k es la continuación ser salvado, y (lambda (v k0) (k v)) es el procedimiento de escape que restaura esta continuación (cualquiera que sea la continuación k0 que está activa cuando se le llama, se descarta).

Así que, para responder a su pregunta para el Esquema:. Sí, se puede hacer

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top