[Date Index]
[Thread Index]
[Author Index]
Re: scope all wrong? in Mathematica 4.1
*To*: mathgroup at smc.vnet.net
*Subject*: [mg31844] Re: [mg31827] scope all wrong? in Mathematica 4.1
*From*: Andrzej Kozlowski <andrzej at tuins.ac.jp>
*Date*: Fri, 7 Dec 2001 05:56:18 -0500 (EST)
*Sender*: owner-wri-mathgroup at wolfram.com
This sort of arguments seem to be a regular feature on this list. I do
not feel like going into detail because I remember all this having been
done before more than once. There are however three general points that
I would make.
1) All the "unexpected" outputs are exactly as would be expected by
anyone who has a fair grasp of the Mathematica language and can be
supported by the documentation. Therefore they can't be called bug, at
least not in the sense that I understand the term. (This is not to say
that there are no bugs in mathematica, it certainly has its fair share.
Just that none of these are.)
In fact the first two cases are Mathematica "standard errors", discussed
in this group a countless number of times . If a Mathematica beginner
came up with them I would refer him to the Mathematica Book. The other
examples are more subtle but highly contrived. In the unlikely event
that that a beginner would be troubled by them my reaction would be to
say "why on earth do you want to do that?".
2) One can certainly argue about the good and bad points of the design
of a programming languages. However, to a large extent this is a matter
of what one is used to, how and how often one uses a language and of
personal taste. For example, you have written on the subject of Block
and Module before, and I have found that some of the things that you
criticize are in my opinion among their strongest points, allowing many
constructions that are difficult to achieve in other programming
languages.
3) I can imagine that there may be good reasons for being interested in
translating between different programming languages. I do not know much
about that. However, as a matter of practice I find "translating" a bad
idea. I use two languages, Mathematica and Common Lisp, the first very
often and the second when really needed, and I make an effort to
consciously avoid trying to translate between them since this is the
surest route to inefficient programming. Both languages have their
unique strengths and are ideally suited for different purposes. The
Mathematica language is certainly unlike any other but I really do not
see why this is a bad thing. And after all, as you yourself have
written, one is always always free not to use it. Since you have already
made this point what is the point you are trying to make now?
Andrzej
On Wednesday, December 5, 2001, at 08:51 PM, Richard Fateman wrote:
> Consider the mathematica definition
>
> rr[x_] := Block[{x}, x = 5; Print["x is ", x]]
>
> what do you expect here?
>
> rr[z] --> x is 5 is printed.
> but you might not expect
>
> rr[4] --> "Block::"lvsym": "Local variable specification{4}
> contains 4
> which is not a symbol or an assignment to a symbol."
>
> If you use Module instead of Block, you get
> the same.
>
> However,
> Block[{x = 4}, Block[{x}, x = 5; Print["x is ", x]]]
>
> prints x is 5
>
> Using pattern matching for
> substituting 4 for x in rr[4] even when x is bound seems
> to be counter to what most programming language designers
> would expect.
>
>
>
> Now look at
>
> uu[x_?((x = 5; Print["x is ", x]; True) &)] := x
>
> Usually when one defines a program, nothing is printed.
> Here, we get
> x is 5
> 5
> x is 5
>
> If we do this:
> x =400
> uu[70]
> x is 5 printed
> the value returned is 70
> and the global x is 5.
>
> Try this:
> Module[{x}, uu[x_?((x = 5; Print["x is ", x]; True) &)] := x;
> Print["in Module, x is " , x]]
>
> The expectation in a system supporting lexical scope
> with Module
> is that no use of x inside the module would escape.
> But it does. The global x is set to 5.
>
>
> The reason this all came up is in correspondence suggesting
> that programs in one computer algebra system could be
> translated into another. If systems are semantically
> "surprising", it is more difficult. I wonder how much
> of mathematica internally depends on wrong scope, or how
> much of the code is susceptible to bugs because of unexpected
> capture of names. (I suspect that this has caused a proliferation
> of package names e.g. MySecretNameSpace`x in Mathematica
> routines).
>
> RJF
>
>
>
>
Andrzej Kozlowski
Toyama International University
JAPAN
http://platon.c.u-tokyo.ac.jp/andrzej/
Prev by Date:
**Re: scope all wrong? in Mathematica 4.1**
Next by Date:
**Re: Surface graphics (Plot4D) coloring question**
Previous by thread:
**Re: scope all wrong? in Mathematica 4.1**
Next by thread:
**Re: scope all wrong? in Mathematica 4.1**
| |