MathGroup Archive 2010

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

Search the Archive

Re: math =!= mathematica

  • To: mathgroup at smc.vnet.net
  • Subject: [mg108623] Re: math =!= mathematica
  • From: dh <dh at metrohm.com>
  • Date: Thu, 25 Mar 2010 04:27:43 -0500 (EST)
  • References: <hoa19m$fdk$1@smc.vnet.net> <4BA9F75F.7020908@metrohm.com> <4BAA0104.5020904@gmail.com> <4BAA1382.8060505@metrohm.com> <4BAA84B2.9040706@gmail.com>

Hi Ralf,
If you insist on using the same identifiers that are already defined in 
System`, you may set the $ContextPath to your own context. But if you 
then want to use a function from System, you need to qualify it like: 
System`...
Daniel

On 24.03.2010 22:31, Ralf Hemmecke wrote:
> Dear Daniel,
>
>> in Mathematica it is usage that user identifier should always start with a lower
>> case letter.
>
> And what if I have to maintain a system where that convention (is that
> written somewhere, actually?) is not followed? I cannot easily change
> the user interface of that package.
>
>> System names always start with a capital. This prevents any
>> conflicts.
>
> Well, yes, but I haven't written those packages and people don't always
> follow conventions.
>
> And as written at
> http://reference.wolfram.com/mathematica/tutorial/DefiningVariables.html
> under "A useful principle in using Mathematica":
>
> """
> Mathematica uses both uppercase and lowercase letters. There is a
> convention that built-in Mathematica objects always have names starting
> with uppercase (capital) letters. To avoid confusion, you should always
> choose names for your own variables that start with lowercase letters.
> """
>
> It doesn't say that may code is forbidden to use capital letters or
> "words starting with capital letters are reserved Mathematica
> identifiers". So Mathematica should behave properly even when I use
> idenifiers that are already defined in the System` context.
>
>> A further mean is the usage of BeginPackage, Begin, End, EndPackage, but
>> I think you know about this.
>
> As you have seen in my code, shielding something with BeginPackage does
> not always help. I still don't know why my code behaves so strangely. In
> particular, I don't understand the "Removed[Array]" part. I don't see
> that I have entered a "Remove" command.
>
> Mathematica clearly does not behave according its own specification and
> this is what bothers me.
>
> Ralf
>
>> Daniel
>>
>> On 24.03.2010 13:09, Ralf Hemmecke wrote:
>>> Oh, it was exactly what I wanted. Suppose, I write a big Mathematica package
>>> with lots of new names that I export in my context.
>>> Everything works fine for Mathematica up to version 7. Now assume in version 8
>>> one of my identifiers is suddenly a member of Mathematica's System`
>>> context.
>>>
>>> Using Array in my proposed code was just an example of this situation.
>>> You can even suppose that I don't want to export my identifier, i.e. my
>>> Array would only appear in the A`Private` context.
>>>
>>> Of course, I don't want that the internals of my code suddenly break,
>>> because an identifier I use in a private context is exposed from System`
>>> and thus probably protected and not changable.
>>>
>>> What can I do?
>>>
>>> Ralf
>>>
>>>
>>> On 03/24/2010 12:28 PM, dh wrote:
>>>> Hi Ralf,
>>>> if you say: `Array[c,3]=17 you are not calling the function "Array"
>>>> that
>>>> lives in the System context, but you create a new symbol in the context
>>>> "A". Hardly what you want.
>>>> Daniel
>>>>
>>>>
>>>> On 23.03.2010 10:23, hemmecke wrote:
>>>>> Does somebody know why I get different behaviour for the following
>>>>> commands in a commandline session of mathematica 7 or inside a
>>>>> notebook?
>>>>> It also seems to be different in different Mathematica versions for
>>>>> the
>>>>> notebook format.
>>>>> See http://www.risc.jku.at/people/hemmecke/mathematica/ for the
>>>>> notebook files for Mathematica 5.2, 6.0, 7.0.
>>>>>
>>>>> Can someone explain the
>>>>>
>>>>> General::dupsym: The symbol Array with context A` already exists.
>>>>>
>>>>> message? Why does that message appear at all? If A`Array exists, then
>>>>> Mathematica should just use it, shouldn't it?
>>>>>
>>>>> According to
>>>>> http://reference.wolfram.com/mathematica/tutorial/Contexts.html
>>>>> we have:
>>>>> `name a symbol in the current context
>>>>> So why is Mathematica complaining?
>>>>>
>>>>> Ralf
>>>>>
>>>>>> math
>>>>> Mathematica 7.0 for Linux x86 (32-bit)
>>>>> Copyright 1988-2008 Wolfram Research, Inc.
>>>>>
>>>>> In[1]:= BeginPackage["A`"]
>>>>>
>>>>> Out[1]= A`
>>>>>
>>>>> In[2]:= {$ContextPath, $Context}
>>>>>
>>>>> Out[2]= {{A`, System`}, A`}
>>>>>
>>>>> In[3]:= `Array[c,3]=17
>>>>>
>>>>> Array::shdw: Symbol Array appears in multiple contexts {A`, System`}
>>>>> ; definitions in context A` may shadow or be shadowed by other
>>>>> definitions.
>>>>>
>>>>> Out[3]= 17
>>>>>
>>>>> In[4]:= Array[c,3]
>>>>>
>>>>> Out[4]= 17
>>>>>
>>>>> In[5]:= `Array[c,3]
>>>>>
>>>>> General::dupsym: The symbol Array with context A` already exists.
>>>>>
>>>>> Out[5]= Removed[Array][c, 3]
>>>>>
>>>>> In[6]:= A`Array[c,3]
>>>>>
>>>>> Out[6]= 17
>>>>>
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>
>
>


-- 
Daniel Huber
Metrohm AG
International Headquarters
Oberdorfstr. 68, CH-9101 Herisau / Switzerland
Phone +41 71 353 8606, Fax +41 71 353 89 01
Mail <mailto:dh at metrohm.com>
Web <http://www.metrohm.com




  • Prev by Date: Re: math =!= mathematica
  • Next by Date: Re: An open note for all the Mathematica
  • Previous by thread: Re: math =!= mathematica
  • Next by thread: Re: math =!= mathematica