MathGroup Archive 1997

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: Until -Reply

  • To: mathgroup at smc.vnet.net
  • Subject: [mg7110] Re: [mg7096] Re:[mg7063] Until -Reply
  • From: Allan Hayes <hay at haystack.demon.co.uk>
  • Date: Sun, 11 May 1997 02:57:10 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

Wed, 7 May 1997
Sean Ross <SEAN at mail.creol.ucf.edu>
[mg7096] Re:[mg7063]  Until -Reply

>The forms:
>.....; or yours
> Until[test_,body_]:=While[test=!=True,body];
>work fine, but are not a true Until because they don't execute  
body first.

Sean:

The form I suggestion in mg[7075]:

SetAttributes[Until,HoldAll]
Until[test_, body_]:= While[body;test=!=True]

does execute body first:

i=1;Until[True,i++];i

	2
	
Allan Hayes
hay at haystack.demon.co.uk
http://www.haystack.demon.co.uk/

**********************

Begin forwarded message:

>From: Sean Ross <SEAN at mail.creol.ucf.edu>
>Subject: [mg7110] Re:[mg7063]  Until -Reply

The big difference between a While and an Until is that the Until  
performs its test
after the execution of the body and while tests first.

The forms:

Until[test_,body_]:=While[Unevaluated[Not[test]],body]; or yours
Until[test_,body_]:=While[test=!=True,body];

work fine, but are not a true Until because they don't execute body  
first.

The form:

Until[test_,body_]:=body;While[Unevaluated[Not[test]],body];

works for simple cases in which the variables in test are in existence
independent of body, but does not work when the definitions necessary for
execution of the test are first performed in body, so this is not a  
true Until
structure either.  Your suggestion applied to a true Until:

Until[test_,body_]:=body;While[test=!=True,body]

falls prey to the same problem.  It is not a true until because the  
variables
necessary to perform the test cannot be first defined in body, so  
it is not truly an
independent structure.

As an example for this definition problem, imagine a test involving  
the second
element of a List, but the list is not defined anywhere except in body. 
Mathematica seems to scan the entire structure to make sure that  
List[[2]] makes
sense before it executes any of it rather than waiting until the  
test is to be
performed to see if it makes sense.

What I need is an attribute that will stop mathematica from examining or
precompiling test or While so that it only looks at it after body  
is executed for the
first time.

Thanks for your help.


  • Prev by Date: Re: Boundary Value Problem
  • Next by Date: Re OPTICA
  • Previous by thread: Re: Until -Reply
  • Next by thread: Re: Until -Reply -Reply