Contexts and Packages
A typical package written in Mathematica
introduces several new symbols intended for use outside the package. These symbols may correspond for example to new functions or new objects defined in the package.
There is a general convention that all new symbols introduced in a particular package are put into a context whose name is related to the name of the package. When you read in the package, it adds this context at the beginning of your context search path $ContextPath
This reads in a package for proving primality.
The symbol ProvablePrimeQ
is in the context set up by the package.
You can refer to the symbol using its short name.
The full names of symbols defined in packages are often quite long. In most cases, however, you will only need to use their short names. The reason for this is that after you have read in a package, its context is added to $ContextPath
, so the context is automatically searched whenever you type in a short name.
There is a complication, however, when two symbols with the same short name appear in two different packages. In such a case, Mathematica
will warn you when you read in the second package. It will tell you which symbols will be "shadowed" by the new symbols that are being introduced.
The symbol ProvablePrimeQ
in the context PrimalityProving`
is shadowed by the symbol with the same short name in the new package.
You can access the shadowed symbol by giving its full name.
Conflicts can occur not only between symbols in different packages, but also between symbols in packages and symbols that you introduce directly in your Mathematica
session. If you define a symbol in your current context, then this symbol may become shadowed by another symbol with the same short name in packages that you read in. The reason for this is that Mathematica
searches for symbols in contexts on the context search path before looking in the current context.
This defines a function in the current context.
function in your current context will be shadowed by the one in the package.
This sets up the coordinate system for vector analysis.
from the package is used.
If you get into the situation where unwanted symbols are shadowing the symbols you want, the best thing to do is usually to get rid of the unwanted symbols using Remove[s]
. An alternative that is sometimes appropriate is to rearrange the entries in $ContextPath
and to reset the value of $Context
so as to make the contexts that contain the symbols you want be the ones that are searched first.
|$Packages||a list of the contexts corresponding to all packages loaded into your Mathematica session|
Getting a list of packages.