Next: scheme overview libraries, Previous: scheme overview data, Up: scheme overview [Index]
Whenever a Scheme expression is evaluated there is a continuation
wanting the result of the expression. The continuation represents an
entire (default) future for the computation. For example, informally
the continuation of 3
in the expression
(+ 1 3)
adds 1 to it. Normally these ubiquitous continuations are hidden behind the scenes and programmers do not think much about them. On rare occasions, however, a programmer may need to deal with continuations explicitly.
The call-with-current-continuation
procedure allows Scheme
programmers to do that by creating a procedure that reinstates the
current continuation. Control features
The call-with-current-continuation
procedure accepts a procedure,
calls it immediately with an argument that is an escape
procedure. This escape procedure can then be called with an argument
that becomes the result of the call to
call-with-current-continuation
. That is, the escape procedure
abandons its own continuation, and reinstates the continuation of the
call to call-with-current-continuation
.
In the following example, an escape procedure representing the
continuation that adds ‘1’ to its argument is bound to
escape
, and then called with ‘3’ as an argument. The
continuation of the call to escape
is abandoned, and instead the
‘3’ is passed to the continuation that adds ‘1’:
(+ 1 (call-with-current-continuation (lambda (escape) (+ 2 (escape 3))))) ⇒ 4
An escape procedure has unlimited extent: It can be called after the
continuation it captured has been invoked, and it can be called multiple
times. This makes call-with-current-continuation
significantly
more powerful than typical non–local control constructs such as
exceptions in other languages.
Next: scheme overview libraries, Previous: scheme overview data, Up: scheme overview [Index]