Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2000
*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 2000

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

Search the Archive

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



  • Prev by Date: Re: Mathematica won't solve simple diff. eqn.--Correction
  • Next by Date: RE: Style Sheets for Notebooks
  • Previous by thread: Re: 2nd arg to BeginPackage
  • Next by thread: (No Subject)