Re: Assignment problem
- To: mathgroup at smc.vnet.net
- Subject: [mg86345] Re: Assignment problem
- From: Albert Retey <awnl at arcor.net>
- Date: Sun, 9 Mar 2008 05:00:33 -0500 (EST)
- References: <fqo8o1$suo$1@smc.vnet.net> <fqqs3b$kf5$1@smc.vnet.net> <fqtqin$d3j$1@smc.vnet.net>
Hi,
>> 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)?
1) Isn't that enough? I think it is a big plus if you can do the same
thing with simpler syntax. It also fits much better in the syntax of
Table and other Mathematica-constructs with the need of iterators, so
code becomes more uniform which makes it also easier to understand. I
also have never struggled over index mismatches with Do loops, but that
was the most common error I made when writing C-code -- with for loops
(admittedly I was switching between languages at that time, which also
was an importand reason for this).
Of course there are things that you can do only with a For loop, but the
price is that you always have to check what really happens in a For loop
when you try to understand what it does, and at least for me that is
usually more difficult. When I see a Do-loop, I see (or guess, probably
not always correctly) that something simple is going on...
2) Do-loops do a scoping of the indices, which might not always be what
you want, but I think in most cases is appropriate.
3) I have not really investigated this, since I never had the need for a
For-loop in mathematica, but I guess that Do loops are (or at least
should be) also more efficient, since no mathematica code needs to be
evaluated when determining the indices and they can be determined in
advance. But this might only be relevant in special situations...
just my 2 cents
albert
PS: when playing around with For and Do loops I just discovered that the
following loops behave differently, and the somewhat surprising result
of the Do-loop indicates that the indices are really determined in advance:
Do[Print[++i], {i, 0, 3, 3}]
For[i = 0, i <= 5, i += 3, Print[++i]]
on the other hand, that means that the two constructs are not as
interchangable as one might think...