[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Procedure proposal: call-with-escape-procedure
From: |
Marius Vollmer |
Subject: |
Re: Procedure proposal: call-with-escape-procedure |
Date: |
03 Mar 2001 17:44:53 +0100 |
User-agent: |
Gnus/5.0803 (Gnus v5.8.3) Emacs/20.7 |
Martin Grabmueller <address@hidden> writes:
> I often find an escape procedure useful when writing Scheme code, such
> as for early exits on success, on error or for other reasons. Since
> `call/cc' is too general (and too expensive in Guile), and using
> `catch' and `throw' is too clumsy for my taste, I tried to find a
> better and generally useful alternative.
Yes, I also think that the interactions between call/cc and
dynamic-wind have not been agreed upon in the Scheme community.
I think it is important to have something like call/ec and tell people
to use it instead of call/cc when they can. We should maybe even have
`dynamic-unwind' which is like dynamic-wind except that it is an error
to enter or leave it more than once (it would need an `enter' thunk,
then). Or maybe better, to specify that call/cc does not cause the
`enter' and `leave' thunks of a dynamic-wind to run, but call/ec does.
Or something.
Martin, could you try to summarize what other Scheme implementations
do? Call/ec (which is actually called
call-with-escaping-continuation, I think) should not really be
uncommon.
I do like the theoretical power of call/cc, but I'm wary of its
practical consequences. I'd say that few people really take call/cc
into account for every bit of code that they write. "Can I cope with
this function returning multiple times? What does my algorithm mean
anyway when it is restarted in the middle?"
Call/ec represents the more common notion of aborting an operation. I
think it will suffice for a large class of uses of call/cc. The
larger part of the rest could probably be taken care of by call/1c,
call-with-one-time-continuation, which would construct a continuation
that could be activated at most once, and only when the flow of
control had not yet activated that continuation in the `natural' way.
In other words, call/1c would return exactly once.
Well, please take my comments with a large dose of salt, I have to
think more about this to get the details right and to get a form
opinion. Thinking about continuations always leaves me dazed.
- Procedure proposal: call-with-escape-procedure, Martin Grabmueller, 2001/03/02
- Re: Procedure proposal: call-with-escape-procedure,
Marius Vollmer <=
- Re: Procedure proposal: call-with-escape-procedure, Marius Vollmer, 2001/03/03
- Re: Procedure proposal: call-with-escape-procedure, Martin Grabmueller, 2001/03/05
- Re: Procedure proposal: call-with-escape-procedure, Marius Vollmer, 2001/03/05
- Re: Procedure proposal: call-with-escape-procedure, Marius Vollmer, 2001/03/05
- Re: Procedure proposal: call-with-escape-procedure, Martin Grabmueller, 2001/03/06
- Re: Procedure proposal: call-with-escape-procedure, Marius Vollmer, 2001/03/06
- Re: Procedure proposal: call-with-escape-procedure, Martin Grabmueller, 2001/03/06
- Re: Procedure proposal: call-with-escape-procedure, Marius Vollmer, 2001/03/06
- Re: Procedure proposal: call-with-escape-procedure, Miroslav Silovic, 2001/03/06
- Re: Procedure proposal: call-with-escape-procedure, Marius Vollmer, 2001/03/06