Re: Context headache
- To: mathgroup at smc.vnet.net
- Subject: [mg70932] Re: Context headache
- From: dh <dh at metrohm.ch>
- Date: Thu, 2 Nov 2006 06:47:07 -0500 (EST)
- References: <ei9p0d$22s$1@smc.vnet.net>
Hi Xerxes, a function that iterates over contexts can be made by specifying the fully qualified symbol names. Here is an example. First we set up 2 symbols in 2 different contexts: Begin["test1`"]; t1=1; End[]; Begin["test2`"]; t1=2; End[]; now we use a function that prints variables in these contexts: ( Print[Symbol[#<>"t1"]]; )& /@{"test1`","test2`"} Daniel Xerxes wrote: > Hi all, > > I'm trying to write a Mathematica analysis package in which > various data sets are distinguished by being placed in their > own contexts, say data1`data, data2`data, etc. This is helpful > in that you can always hop into a context to work with each > data set individually. Of course, at some point, that method > becomes too much of a chore and you want to automate things. > I'm trying to make a function that iterates over several contexts; > it will hop into the context, execute a function on the data in > that context, save the result as another variable in that context > and then hop back out. > > But as described in > http://groups.google.com/group/comp.soft-sys.math.mathematica/msg/7368d0cd14aa8960 > (thread aptly named "Nailing jelly to a tree"), you can't do this. > As soon as you try evaluating the iterating function, all the > variables inside it get poisoned with the Global` context. You > might try fixing this by using more nails on the jelly, say > a hideous construct like > > Evaluate[Symbol[$Context<>"result"]] = > analyze[Evaluate[Symbol[$Context<>"data"]]]; > > but since my actual functions are much more complicated than > this simple example, any readability of the code goes right away. > > Is there any better workaround known that would allow > iteration over multiple contexts? > > Or alternatively, since it seems like I'm trying to force contexts > to do something they don't want to do, is there some better > data encapsulation technique I haven't thought of yet? > > Thanks, > Xerxes >