Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2001
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2001

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

Search the Archive

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