Re: Context
- To: mathgroup at smc.vnet.net
- Subject: [mg70968] Re: [mg70956] Context
- From: Yasvir Tesiram <yat at omrf.ouhsc.edu>
- Date: Fri, 3 Nov 2006 01:39:15 -0500 (EST)
- References: <200611021149.GAA15806@smc.vnet.net>
Hi, 1. You have used SetDelayed. " lhs := rhs assigns rhs to be the delayed value of lhs. rhs is maintained in an unevaluated form. When lhs appears, it is replaced by rhs, evaluated afresh each time. " But this isn't the cause of your woes. 2. Since fun was never evaluated but only interpreted, you would not have received the following message: "Begin::cxt: Invalid context specified at position 1 in Begin[x]. A context \ must consist of valid symbol names separated by and ending with `." This isn't the cause of your woes either, but a decent example of how Mathematica interprets input and is related to 1 above and point 4 below. 3. But here is the most important thing to remember about Mathematica and variable (name) interpretation. Mathematica interprets names in an expression by reading the complete expression first. So here, t has already been interpreted "before" your expression is executed, and Begin happens to be a part of your expression. In consequence, t is "globalized" and Begin has no effect. 4. The syntax you have used for Begin is incorrect. It should be Begin["x`"] Typically, you would use Begin as the first line and then execute it. Following this everything belongs in Context "x", until End is called, wherein the system reverts back to Global context and t should no longer exist, neither in Context "x", nor Global. OK, I'm a bit rusty on this myself, but here is a summary and hopefully it will clear things up for you. The Context during a fresh start of Mathematica is Global. When a variable first appears in an expression it is interpreted and immediately becomes part of the current context. When Begin is called, it changes the current context. The context is named (in your case x). There is a special syntax for the argument to Begin. When new variables are introduced (actually names), they become part of the current context. Related to all of this is $ContextPath, which I won't go into. Hope this helps alleviate some confusion. Cheerful regards Yas On Nov 2, 2006, at 5:49 AM, dh wrote: > > Hello, > > consider: > > fun[x_]:=( Begin[x]; > > Print[t]; > > End[]; > > ); > > according to the manual one would think that the variable t in > context x > > is printed. However, this is wrong! What is printed is Global`t. > > Therefore, the context to which a symbol belongs is determined during > > parsing and NOT execution. > > Can anybode give more insight and strict rules for this quirck? > > Daniel > >
- References:
- Context
- From: dh <dh@metrohm.ch>
- Context