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)

Re: [Scheme-reports] when and unless Pierpaolo Bernardi 24 May 2011 14: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