Non-Deterministic Evaluation In Under 300 Bytes

Christian Tismer tismer at tismer.com
Sun Mar 26 07:59:03 EST 2000


Michael Hudson wrote:
> 
> I was playing around with Chris Tismer's stackless python today, and
> wondering what I could actually use continuations for, so I pulled my
> copy of On Lisp off the bookshelf and came up with:

[A really nice example that I could never imagine!]

Thank you, this is incredible.

...
> 2) call-with-current-continuation is a *really bad* interface to the
>    continuation world, at least from the point of actually
>    understanding the code (I implemented the above by writing a
>    call/cc function, transliterating the scheme version Graham
>    presents in the book, and then "unwinding" the calls to
>    call/cc. The result made more sense then the original - even than
>    the scheme!). Chris's approach is better, at least for me.

On the call/cc issue: I have been tinkering with this
at length. It is easy to write your own call/cc with
Stackless Python, but it turned out to be not so very useful,
for a couple of reasons:

- Having an explicit continuation as a parameter can cause
  unwanted circular references which are hard to remove.
- Python gives you an implicit continuation all the time:
  You always have a caller. Tis is the frame where the
  return statement would usually return to.
  This makes it easy to catch your caller just when it
  is needed.
- You still *can* use direct call/cc style if you need it.
  This is about 3 lines of Python code.

All in all, it turned out to be more natural to use just
the continuations which Python gives you for free. A major
problem was how to access them easily. The most powerful
and complication-less functions are:

continuation.caller()            - get me my caller
continuation.return_current()    - return *me* to my caller

The latter is new with Version 1.1, and it was exactly
the missing counterpart for caller. It allows you to
initialize a function via the normal call interface
and then jump back immediately, returning your own
continuation as a callable object.

see you soon at http://www.stackless.com with SLP 1.1 - chris

-- 
Christian Tismer             :^)   <mailto:tismer at appliedbiometrics.com>
Applied Biometrics GmbH      :     Have a break! Take a ride on Python's
Kaunstr. 26                  :    *Starship* http://starship.python.net
14163 Berlin                 :     PGP key -> http://wwwkeys.pgp.net
PGP Fingerprint       E182 71C7 1A9D 66E9 9D15  D3CC D4D7 93E2 1FAE F6DF
     we're tired of banana software - shipped green, ripens at home




More information about the Python-list mailing list