Hi --

On Fri, 31 Jul 2009, Rob Biedenharn wrote:

> On Jul 30, 2009, at 2:16 PM, David A. Black wrote:
>> Hi --
>> 
>> On Fri, 31 Jul 2009, Lloyd Linklater wrote:
>> 
>>> I have the answer.  fyi, it is that
>>> 
>>> doSomething until condition
>>> 
>>> does not work at all like
>>> 
>>> begin doSomething end until condition
>>> 
>>> In the first case, the condition is checked BEFORE the doSomething is
>>> run.  In the second case, the condition is checked AFTER the doSomething
>>> is run.  I am not sure just why this is or how I could have figured it
>>> out intuitively.  It seems to me that it would be better to have
>>> something like this (to mimic pascal)
>> 
>> You didn't have to figure it out intuitively; I told you on Saturday
>> :-) (Though I garbled my example a bit.)
>> 
>>> doSomething while condition #check condition before
>>> 
>>> doSomething until condition #check condition after
>> 
>> I suspect Ruby got the idiom from Perl, and/or from the way similar
>> language would be used in English. I'm not sure about the above in
>> Pascal (a quick look at several sources doesn't show either of those
>> constructs), but I don't think you'd want the while/until difference
>> to make the difference between the order of execution like that. The
>> difference should only be whether condition is being checked for truth
>> or falsehood. In other word:
>> 
>> statement while condition
>> 
>> and
>> 
>> statement until (not condition)
>> 
>> should always be the same.
>> 
>> 
>> David
>> 
>> -- 
>> David A. Black / Ruby Power and Light, LLC / http://www.rubypal.com
>> Q: What's the best way to get a really solid knowledge of Ruby?
>> A: Come to our Ruby training in Edison, New Jersey, September 14-17!
>>  Instructors: David A. Black and Erik Kastner
>>  More info and registration: http://rubyurl.com/vmzN
>
>
> But David, should the behavior of:
>
> statement while condition
>
> be different from:
>
> begin statement end while condition
>
> which is what the issue boils down to. When the statement is enclosed in a 
> block, it is evaluated once before the condition is checked.  This is what I 
> intended to show very explicitly in my response to Lloyd.

I wasn't sure which issue was the focus (see my response to Lloyd
about the Pascal thing). I personally don't have any problem with the
above difference. I think they exist for different reasons: the
begin/end one specifically as a way of forcing at least one execution
of statement (as opposed to while conditions; statement; end), and the
one-line modifier form just as a convenience.

I don't have an air-tight technical argument, though. (There probably
isn't one.)


David

-- 
David A. Black / Ruby Power and Light, LLC / http://www.rubypal.com
Q: What's the best way to get a really solid knowledge of Ruby?
A: Come to our Ruby training in Edison, New Jersey, September 14-17!
    Instructors: David A. Black and Erik Kastner
    More info and registration: http://rubyurl.com/vmzN