MathGroup Archive 2008

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

Search the Archive

Re: Assignment problem

On Mar 8, 5:42 am, Helen Read <r... at> wrote:
> Albert Retey wrote:
> > Note that usually using a Do-Loop is the better choice in Mathematica:
> (as compared with a For loop).
> This is the second post I've seen today that says that Do loops are
> better than For loops in Mathematica. What is better about them (aside
> from slightly simpler syntax)?
> --
> Helen Read
> University of Vermont

Mostly the slightly simpler syntax.

For is more general, the downside being that you have to be more
careful to understand exactly what it's doing.  For instance, you can
mess with the iterator inside a For loop, but not inside a Do loop:

For[n = 1, n <= 5, n++, Print[n]; If[n == 1, n = 3]]

Do[Print[n]; If[n == 1, n = 3], {n, 1, 5}]

I think it's more easy to make off-by-one errors using a for loop.

Do is a little faster.

In[57]:= Timing[Do[Factor[n], {n, 1, 1000000}]]

Out[57]= {1.22538, Null}

In[58]:= Timing[For[n = 1, n <= 1000000, n++, Factor[n]]]

Out[58]= {3.10699, Null}

It's partly a stylistic kind of thing.  Mathematica lets you do
procedural style programming, but the functional style is closer to
it's sweet spot.  In this example, the difference is small, but if you
want to do something like square a bunch of numbers, then it's a lot
nicer to do

In[59]:= numbers = {1, 12, 50};
result = Map[#^2 &, numbers]

Out[60]= {1, 144, 2500}


In[106]:= numbers = {1, 12, 50};
result = {Null, Null, Null};
For[n = 1, n <= Length[numbers], n++, result[[n]] = numbers[[n]]^2]

Out[109]= {1, 144, 2500}

There is so often a better way to do things than using a For loop (the
difference can be very small or somewhat less small), that my first
instinct is to avoid For entirely except under very special



  • Prev by Date: Re: changing style of vertices for ShowGraph with Combinatorica
  • Next by Date: Determinant and Characteristic Polynomial not working properly
  • Previous by thread: Re: Assignment problem
  • Next by thread: Re: Assignment problem