[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shift and reset, plus] "while"
From: |
Wolfgang J Moeller |
Subject: |
Re: [shift and reset, plus] "while" |
Date: |
Wed, 13 Apr 2011 16:56:50 +0200 (CEST) |
On Wed, 13 Apr 2011, Andy Wingo wrote:
>[...]
> > I'd like to "improve" (while) as currently provided by ice-9/boot.scm
> >
> > (a) to always have a well-defined result
>
> This is a good idea; it allows `while' to be an expression, not just a
> statement.
>
> > (b) to allow for (break arg ...)
>
> Also a good idea.
>
> Tricky, though; your comments indicate that you would want (break) to
> return #t, instead of zero values.
Does anyone like to _test_ for zero values? Not me.
As regards the REPL, you still can (break (if #f #f)).
Alternative: return zero values on "normal termination",
instead of #<unspecified>, so the REPL keeps quiet then,
as it did before. Not as handy, but at least well-defined.
I don't remember if GUILE V1.6 had the return values of #f and #t,
or if they were my own invention ... IIRC it did have (break arg)
with a single argument. Anyway, #t is compatible with V2.0.0 .
Not exactly tricky - see my code's prompt handler.
> > (c) to only take a single (call-with-prompt)
>
> Why? It's true that the optimizer doesn't live up to its name yet, but
> it should be trivial to elide one or the other if the prompt tag is only
> referenced by the <prompt> form.
Just for simplification of the macro - it's plain overkill to create two
prompts.
Nothing to do with the optimizer per se; my note only relates to the fact that
the (promised) optimization ought to work just as well with the single prompt.
> > (d) to correct a buglet that currently transforms the non-operator
> > `continue'
> > into a function of arbitrarily many (as opposed to zero)
> > arguments.
>
> I have not seen this bug. Do you have code that can reproduce it with
> stable-2.0 ?
No code - it's a buglet w/o much consequence - from ice-9/boot-9.scm :
[...]
;;; {While}
[...]
(define-syntax while
[...]
(define-syntax #,(datum->syntax #'while 'continue)
(lambda (x)
(syntax-case x ()
((_)
#'(abort-to-prompt continue-tag))
((_ . args) ; <<<<< wjm: no argumenta allowed - OK
(syntax-violation 'continue "too many arguments" x))
(_
#'(lambda args ; <<<<< wjm: arguments allowed - WHY??
(apply abort-to-prompt continue-tag args))))))
[...])
Stand-alone fix:
((_ . args) ; no arguments allowed
(syntax-violation 'continue "too many arguments" x))
(_
#'(lambda () ; also, zero arguments
(abort-to-prompt continue-tag)))))
Best regards,
Wolfgang J. Moeller, Tel. +49 551 47361, wjm<AT>heenes.com
37085 Goettingen, Germany | Disclaimer: No claim intended!
http://www.wjmoeller.de/ -+-------- http://www.heenes.com/
- Re: shift and reset, plus "while", Wolfgang J Moeller, 2011/04/04
- Re: shift and reset, plus "while", Andy Wingo, 2011/04/13
- Re: [shift and reset, plus] "while",
Wolfgang J Moeller <=
- Re: [shift and reset, plus] "while", Andy Wingo, 2011/04/13
- Re: [shift and reset, plus] "while", Wolfgang J Moeller, 2011/04/13
- Re: [shift and reset, plus] "while", Andy Wingo, 2011/04/28
- {debug,read,readline,print}-{set!,disable,enable}, Wolfgang J Moeller, 2011/04/29
Re: shift and reset, plus "while", Mark H Weaver, 2011/04/13
Re: shift and reset, plus "while", Andy Wingo, 2011/04/28