[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Scheme mistakes (was Re: nil)



   > > And possibly you should have to write (something like):
   > >
   > >   (throw k v)
   > >
   > > rather than:
   > >
   > >   (k v)
   > >
   > > to invoke a continuation. That's the way that SML/NJ does it.

An advantage to an explicit `throw' special form is that you can throw away
the -old- continuation sooner -- perhaps allowing your program to use less
space.  

Consider evaluating:

  (throw (f x) 42)

Since you know that the expression `(f)' must yield a continuation, the
old continuation can be discarded (and perhaps reclaimed by the garbage
collector) -before- you call the function `f'.  If continuations just look
like procedures, then the programmer would have written:

  ((f x) 42)

is which case you don't know that the old continuation is going to be
discarded until -after- the call to `f' returns a continuation.

It is possible to construct crazy examples that run in constant space given
a `throw' keyword and not without.  But I've never seen this matter in
practice.