DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

(guile.info.gz) Continuations

Info Catalog (guile.info.gz) while do (guile.info.gz) Control Mechanisms (guile.info.gz) Multiple Values
 
 26.5 Continuations
 ==================
 
 The ability to explicitly capture continuations using
 `call-with-current-continuation' (also often called `call/cc' for
 short), and to invoke such continuations later any number of times, and
 from any other point in a program, provides maybe the most powerful
 control structure known.  All other control structures, such as loops
 and coroutines, can be emulated using continuations.
 
    The implementation of continuations in Guile is not as efficient as
 one might hope, because it is constrained by the fact that Guile is
 designed to cooperate with programs written in other languages, such as
 C, which do not know about continuations.  So continuations should be
 used when there is no other simple way of achieving the desired
 behaviour, or where the advantages of the elegant continuation
 mechanism outweigh the need for optimum performance.  If you find
 yourself using `call/cc' for escape procedures and your program is
 running too slow, you might want to use exceptions ( Exceptions)
 instead.
 
  -- Scheme Procedure: call-with-current-continuation proc
      Capture the current continuation and call PROC with the captured
      continuation as the single argument.  This continuation can then be
      called with arbitrarily many arguments.  Such a call will work
      like a goto to the invocation location of
      `call-with-current-continuation', passing the arguments in a way
      that they are returned by the call to
      `call-with-current-continuation'.  Since it is legal to store the
      captured continuation in a variable or to pass it to other
      procedures, it is possible that a procedure returns more than
      once, even if it is called only one time.  This can be confusing
      at times.
 
      (define kont #f)
      (call-with-current-continuation
        (lambda (k)
           (set! kont k)
           1))
      =>
      1
 
      (kont 2)
      =>
      2
 
Info Catalog (guile.info.gz) while do (guile.info.gz) Control Mechanisms (guile.info.gz) Multiple Values
automatically generated byinfo2html