MathGroup Archive 1997

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

Search the Archive

Re: names, symbols, and contexts

  • To: mathgroup at
  • Subject: [mg6221] Re: [mg6175] names, symbols, and contexts
  • From: David Withoff <withoff>
  • Date: Fri, 28 Feb 1997 03:21:39 -0500
  • Sender: owner-wri-mathgroup at

> Here's the problem:  a symbol fname contains the name of a Mathematica
> object, e.g.:
>    fname = "myf"
> The question is how to determine the context of the object named by
> fname (in our case, the context of myf).
> The question comes down to how to torture fname in order to supply the
> result as argument to Context.  
> I've tried all sorts of combinations of SymbolName, ToExpression, and
> ToString, but Mathematica keeps complaining  -- error message is
> Context::ssle : Symbol, string, or HoldPattern[symbol] expected at
> position 1 in Context[...].
> There's something I'm missing.
> (Like many such things, this one is trivial to do in APL or J; I'm
> just not "getting it" how to do the same thing in Mathematica.)
> --
>   Murray Eisenberg                       Internet:  murray at
>   Mathematics & Statistics Dept.            Voice:  413-545-2859 (W)
>   University of Massachusetts                       413-549-1020 (H)
>   Amherst, MA 01003                           Fax:  413-545-1801

Try Context[Evaluate[fname]].

For example, suppose there is a symbol somecontext`myf for which
the context is somecontext`:

In[1]:= Context[somecontext`myf]

Out[1]= somecontext`

and suppose there is a second symbol fname, the value of which is
a string containing the short name (the name without the context)
of somecontext`myf:

In[2]:= fname = "myf"

Out[2]= myf

Since the context of "myf" is not on the context search path (the value
of $Context, followed by the contexts listed in $ContexPath), the symbol
somecontext`myf will not be found based only on the short name:

In[3]:= Context[Evaluate[fname]]

Context::notfound: Symbol myf not found.

Out[3]= Context[myf]

If the context somecontext` of somecontext`myf is added to the context
search path, then the short name myf will be found.

In[4]:= AppendTo[$ContextPath, "somecontext`"]

Out[4]= {Global`, System`, somecontext`}

In[5]:= Context[Evaluate[fname]]

Out[5]= somecontext`

You need to use Evaluate here because the Context function has
the attribute HoldFirst:

In[6]:= Attributes[Context]

Out[6]= {HoldFirst, Protected}

Dave Withoff
Wolfram Research

  • Prev by Date: Re: Mathematica 3.0 html conversion works?
  • Next by Date: Re: contexts,packages,names: again!
  • Previous by thread: Re: names, symbols, and contexts
  • Next by thread: contexts,packages,names: again!