Re: [Scheme-reports] when and unless
John Cowan
(19 May 2011 21:42 UTC)
|
Re: [Scheme-reports] when and unless
Pierpaolo Bernardi
(20 May 2011 09:32 UTC)
|
Re: [Scheme-reports] when and unless
Alex Queiroz
(20 May 2011 09:38 UTC)
|
Re: [Scheme-reports] when and unless
Alaric Snell-Pym
(23 May 2011 10:36 UTC)
|
Re: [Scheme-reports] when and unless
Eli Barzilay
(23 May 2011 10:41 UTC)
|
Re: [Scheme-reports] when and unless
Aaron W. Hsu
(23 May 2011 22:50 UTC)
|
Re: [Scheme-reports] when and unless
Pierpaolo Bernardi
(24 May 2011 08:25 UTC)
|
Re: [Scheme-reports] when and unless
Emmanuel Medernach
(24 May 2011 08:37 UTC)
|
Re: [Scheme-reports] when and unless
Alaric Snell-Pym
(24 May 2011 09:06 UTC)
|
Re: [Scheme-reports] when and unless
Aaron W. Hsu
(24 May 2011 18:57 UTC)
|
Re: when and unless
Arthur A. Gleckler
(24 May 2011 19:35 UTC)
|
Re: [Scheme-reports] when and unless
leppie
(24 May 2011 08:51 UTC)
|
Re: [Scheme-reports] when and unless
Pierpaolo Bernardi
(24 May 2011 09:06 UTC)
|
Re: [Scheme-reports] when and unless
leppie
(24 May 2011 09:23 UTC)
|
Re: [Scheme-reports] when and unless
John Cowan
(24 May 2011 14:51 UTC)
|
Re: [Scheme-reports] when and unless Pierpaolo Bernardi (24 May 2011 14:57 UTC)
|
Re: [Scheme-reports] when and unless
Aaron W. Hsu
(24 May 2011 18:56 UTC)
|
On Tue, May 24, 2011 at 16:44, John Cowan <cowan@mercury.ccil.org> wrote: > leppie scripsit: > >> Take for example: >> >> (define (foo bar) >> (unless (list? bar) (error 'foo "not a list" foo)) >> (map values bar)) >> >> Now applying the above with say (foo 1) will raise an error. If I set >> my debugger to break inside ERROR, I get a nice complete stacktrace, >> including the caller, IOW FOO. >> >> Now take what is suggested: >> >> (define (foo bar) >> (if (not (list? bar)) (error 'foo "not a list" foo) >> (map values bar))) >> >> Now inside ERROR, you do not have 'lost' the caller (FOO) as the >> application of ERROR was a tail call. Given the context of FOO's >> application that may also be a tail call, and so on. > > I would certainly want the last form in WHEN/UNTIL to be a tail position. > The obvious implementation ((when x . y) (if x (begin . y))) would certainly > make it so. The point leppie made is subtler. In the UNLESS case the whole UNLESS form is not in tail position, while in the IF case it is. P. _______________________________________________ Scheme-reports mailing list Scheme-reports@scheme-reports.org http://lists.scheme-reports.org/cgi-bin/mailman/listinfo/scheme-reports