On Tue, 24 Jul 2007, David Van Horn wrote:

> The following program captures and invokes continuations during
> expansion.  I would expect the program to evaluate to #t, which is the
> result according to Andre van Tonder's portable expander, but is this
> behavior specified in the current draft?  My impression is yes,
> although I'd like to make sure.

Good question.  Maybe one of the other implementors can check if they
get the same result.  I am not sure if or how this kind of thing might
interfere with the suggested mark-antimark algorithm, which I do not use.

I am not even sure if this kind of thing is guaranteed to always work even
with my expander, since I do have some uses of global state.  So if a 
user macro transformer is allowed to return twice, I supect (but cannot say 
for certain right now) that inconsistencies might occur.

For this reason, it might have been a good idea to include a statement in the
draft to the effect that the result of returning more than once from a
transformer invocation is unspecified.

>   (syntax-let/cc k
>                  (begin
>                    (syntax-invoke/c k #t)
>                    (let)))

I do not think this can be portable as is, since the expansion order of
expression-begin sequences is not specified as far as I know.  On the
other hand, if you replace (BEGIN ---) by (LET () ---), then the question
remains open.

Cheers
Andre

_______________________________________________
r6rs-discuss mailing list
[email protected]
http://lists.r6rs.org/cgi-bin/mailman/listinfo/r6rs-discuss

Reply via email to