RE: 2nd arg to BeginPackage
- To: mathgroup at smc.vnet.net
- Subject: [mg24772] RE: [mg24760] 2nd arg to BeginPackage
- From: Wolf Hartmut <hwolf at debis.com>
- Date: Thu, 10 Aug 2000 00:31:54 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
> -----Original Message-----
> From: Daniel Reeves [SMTP:dreeves at eecs.umich.edu]
To: mathgroup at smc.vnet.net
> Sent: Wednesday, August 09, 2000 8:33 AM
> To: mathgroup at smc.vnet.net
> Subject: [mg24760] 2nd arg to BeginPackage
>
> My first question is, there seems to be a discrepancy between the
> documentation for BeginPackage:
> BeginPackage["Package`", {"Needed1`", "Needed2`", ...}]
> vs how standard packages use it:
> BeginPackage["Package`", "Needed1`", "Needed2`", ...]
>
> My next question is, why doesn't either form do what I expect here:
>
> BeginPackage["TestPkg`", "Statistics`"];
> ff::usage = "Some function that uses CDF."
> Begin["`Private`"];
> ff[a_] := CDF[NormalDistribution[0,1], a]
> End[]; (* Private context *)
> EndPackage[];
>
> In the definition of ff, it thinks the context for CDF (and
> NormalDistr) is TestPkg`Private` instead of Statistics`...
>
> How can I avoid spelling out the contexts for things like CDF?
>
> Thanks a lot,
> Daniel Reeves
>
> -- -- -- -- -- -- -- -- -- -- -- --
> Daniel Reeves http://ai.eecs.umich.edu/people/dreeves/
>
> "You think you know when you learn,
> are more sure when you can write,
> even more when you can teach,
> but certain when you can program." -- Alan Perlis
>
>
[Hartmut Wolf]
Dear Daniel,
to your second question first: this seems to be a weekness with the package
"Statistics`ContinuousDistributions`". See:
In[1]:=
BeginPackage["TestPkg`", "Statistics`ContinuousDistributions`"];
{$Context, $ContextPath}
ff::usage = "Some function that uses CDF";
Begin["`Private`"];
ff[a_] := CDF[NormalDistribution[0, 1], a]
End[]; (*Private context*)
EndPackage[];
Out[2]=
{"TestPkg`", {"TestPkg`", "Statistics`ContinuousDistributions`", "System`"}}
In[8]:= ?? ff
>From In[8]:=
"Some function that uses CDF"
>From In[8]:=
ff[TestPkg`Private`a_] := TestPkg`Private`CDF[
NormalDistribution[0, 1], TestPkg`Private`a]
In[9]:= CDF[NormalDistribution[0, 1], a]
Out[9]= 1/2*(1 + Erf[a/Sqrt[2]])
In[10]:= ff[a]
Out[10]=
TestPkg`Private`CDF[TestPkg`Private`NormalDistribution[0, 1], a]
You see, NormalDistribution has been loaded, yet the context did not appear
on $ContextPath within your package. So the Symbols could not be resolved
and the definition of ff goes awry. If you explicitly include them within
your "needs list" you'll succeed:
>>>shut down and restart the kernel<<
In[1]:=
BeginPackage["TestPkg`", "Statistics`Common`DistributionsCommon`",
"Statistics`NormalDistribution`",
"Statistics`ContinuousDistributions`"];
{$Context, $ContextPath}
ff::usage = "Some function that uses CDF";
Begin["`Private`"];
ff[a_] := CDF[NormalDistribution[0, 1], a]
End[]; (*Private context*)
EndPackage[];
Out[2]=
{"TestPkg`", {"TestPkg`", "Statistics`Common`DistributionsCommon`",
"Statistics`NormalDistribution`", "Statistics`ContinuousDistributions`",
"System`"}}
In[7]:= ?? ff
>From In[7]:=
"Some function that uses CDF"
>From In[7]:=
ff[TestPkg`Private`a_] := CDF[NormalDistribution[0, 1],
TestPkg`Private`a]
In[8]:= CDF[NormalDistribution[0, 1], a]
Out[8]= 1/2*(1 + Erf[a/Sqrt[2]])
In[9]:= ff[a]
Out[9]= 1/2*(1 + Erf[a/Sqrt[2]])
As to your first question: there are a lot of System functions working
outside of their documented range (and used so by Wolfram.Inc programmers),
so don't mind.
In[10]:= Unprotect[Needs]
In[11]:=
Needs[context_] := Print["Context = ", context, " was needed"]
In[12]:=
BeginPackage["Package`", {"Needed1`", "Needed2`"}]
EndPackage[]
>From In[12]:=
"Context = "\[InvisibleSpace]"Needed1`"\[InvisibleSpace]" was needed"
>From In[12]:=
"Context = "\[InvisibleSpace]"Needed2`"\[InvisibleSpace]" was needed"
Out[12]=
"Package`"
In[14]:=
BeginPackage["Package`", "Needed1`", "Needed2`"]
EndPackage[]
>From In[14]:=
"Context = "\[InvisibleSpace]"Needed1`"\[InvisibleSpace]" was needed"
>From In[14]:=
"Context = "\[InvisibleSpace]"Needed2`"\[InvisibleSpace]" was needed"
Out[14]=
"Package`"
Kind regards, Hartmut