Re: "?" and "??"

*To*: mathgroup at christensen.cybernetics.net*Subject*: [mg1774] Re: "?" and "??"*From*: pehowland at taz.dra.hmg.gb (Paul E. Howland)*Date*: Wed, 26 Jul 1995 00:57:21 -0400*Organization*: Defence Research Agency

In article <DBKwDG.2I2 at wri.com>, Scott.A.Hill at williams.edu (Lancelot) writes: > Also, I'm wondering how I can save several commands as a >package. I'm running Mathematica off of a UNIX machine, and I've >figured out how to save programs to my UNIX account and then call them >back in as needed. Perhaps that is the same thing, eh? Anyway, if >someone could shed light on how I can define such a file as a >"package", I'd be interested. The difference between a package and saving & recalling programs, is that a package is usually a set of function definitions which extend the capabilities of Mathematica, where as your program is probably a set of commands that actually calculate something. Loading a package doesn't cause Mathematica to necessarily calculate anything, it just increases its "knowledge" in a certain area. When writing a package, you normally wrap BeginPackage["mycontext`"] and EndPackage[] around your function definitions. This causes the active contexts to be only mycontext` and System`. This prevents you redefining functions defined in other packages. I thoroughly recommend that you read "Programming in Mathematica" by Roman Maeder, Addison Wesley, 1991, ISBN-0-201-54877-1. This talks in detail about writing packages, and includes a skeleton package which shows the basic commands required to write a package. A simple package would have a structure something like: BeginPackage["Example`"] fn1::usage = "This explains how to use fn1, and also introduces fn1 outside the Private` context" Begin["`Private`"] fn1[a_,b_,c_] := Module[{e}, e=a+b; c+e] fn2[a_] := Module[{}, Print["This function is in the private context & hence can't be called from outside it"]] End[] EndPackage[] Roman's book gives more detail about what happens with the ContextPath, how to protect symbols, etc. Time spent learning to write your own packages is invaluable. It turns Mathematica from a sophisticated pocket calculator into an powerful, extensible computational tool. You can then extend Mathematica to specialise in your own field of work, although it is worth re-iterating the point that always use Mathematica's built in functions whenever possible, as these will be much faster than any package you write. Hope this helps, Paul E Howland Long Range Ground Radar Systems Section tel. +44 (0)1684 895767 LSC2 Division, Room BY209 fax. +44 (0)1684 896315 Defence Research Agency email: PEHOWLAND at DRA.HMG.GB Malvern, Worcs, WR14 3PS, UK. -----------------------------------------------------------------------------