# New to Mathematica Language - Questions on Context

Posted 10 years ago
2447 Views
|
2 Replies
|
1 Total Likes
|
 I am new to Mathematica programming and am trying to develop a package.  My questions are:I have a small set of functions defined in a package inside of a Begin["Private"].  If I call one of my functions from a notebook, I cannot get the numeric value of the function (even if I use //N).  What is the correct way to call a function embedded in a package?  The code of my simple package is below. BeginPackage["EKRScaleupPower"] (* Exported symbols added here with SymbolName::usage *)  averagePowerRC::usage = "averagePowerRC[V, R, C, f] returns the average power of an RC circuit for V volts and f Hertz." capacitanceParallelPlate::usage = "capacitanceParallelPlate[A, d, relativePermittivity, freePermittivity] returns the capacitance of a parallel plate condensor neglecting fringe effects." reactance::usage = "reactance[C,f] returns capacitive reactance in ohms." resistance::usage = "resistance[A, d, resistivity] returns resistance in ohms (Pouillet's law)."  Begin["Private"](* Implementation of the package *)averagePowerRC[V_,R_,C_,f_]:=Module[{x,p},x = 1/ (2 Pi f C);p = 0.5 V^2 R / (R^2 + x^2)]capacitanceParallelPlate[A_,d_,relativePermittivity_,freePermittivity:8.854 10^-12]:=Module[{c},c = relativePermittivity freePermittivity A / d]resistance[A_, d_, resistivity_]:=Module[{r},r = resistivity d / A]reactance[C_,f_]:=Module[{x},x= 1/(2 Pi f C)]End[]EndPackage[]My call from my notebook is below (I suspect that this is the problem):<< EKRScaleupPowercap20L = capacitanceParallelPlate[0.02^(2/3), 0.02^(1/3), 50]The first time I tried to call this from my .nb, I received an error message saying that my function was found in multiple contexts.  If I understand contexts properly, they are similar in idea to the .net namespace.  A logical collection of classes and symbols.  In .net, if I have the same method in multiple namespaces or classes, I can specify the method that I want with a call that uses a Namespace.Class.Method syntax.  For example, FunctionGeneratorsNamespace.Agilent33220a.SquareWave(20, 120) would call the SquareWave method in the Agilent33220a class from the FunctionGeneratorsNamespace.  It looks like the context in Mathematica is similar.  Could anyone point me to a set of example code that clearly demonstrates Mathematica contexts?
2 Replies
Sort By:
Posted 10 years ago
 Nasser - Thanks most kindly.  I agree with the note on the using the verbose context name.
Posted 10 years ago
 SetDirectory[NotebookDirectory[]];Get["EKRScaleupPower.m"];cap20L = capacitanceParallelPlate[0.02^(2/3), 0.02^(1/3), 50](*1.20167*10^-10*)You needed to change the optional argument fromfreePermittivity:8.854 10^-12tofreePermittivity_:8.854 10^-12A call to a function can also be done by explicitly putting the context name in the call. I myself like to do that when I am using more than one package even though it is not needed, but It helps when I am looking at the code later to remind me from which package the function came from. In your case, the call would now become like this:cap20L = EKRScaleupPower`capacitanceParallelPlate[0.02^(2/3),0.02^(1/3), 50](* 1.20167*10^-10 *)
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.