From luke at stat.uiowa.edu  Wed Apr  4 20:45:25 2007
From: luke at stat.uiowa.edu (Luke Tierney)
Date: Wed, 4 Apr 2007 13:45:25 -0500 (CDT)
Subject: [Rd] Exchange of information between functions aside from
 argument/return-value interface
In-Reply-To: <4613EE09.8000809@uni-bayreuth.de>
References: <4613DF85.6030002@uni-bayreuth.de>
	<Pine.LNX.4.64.0704041245320.17651@nokomis.stat.uiowa.edu>
	<4613EE09.8000809@uni-bayreuth.de>
Message-ID: <Pine.LNX.4.64.0704041337480.17651@nokomis.stat.uiowa.edu>

On Wed, 4 Apr 2007, Peter Ruckdeschel wrote:

> Thank you, Luke, for your promptous response.
>
> [snipped away my original message; to be found on
> https://stat.ethz.ch/pipermail/r-devel/2007-April/045216.html]
>
>> Sounds like lexical scoping should work for this also -- use <<- to
>> assign to the variable in the containing scope.
>>
>> Best,
>>
>> luke
>
> yes, in my application, this really solves the problem. Thank you.
>
>
> But I am not quite sure for the general situation:
>
> Recall that we have the sequence of calls
>
> myF() calls notmyG() which --with possibly more functions involved in between--
> directly or indirectly calls myH().
>
> Now, if I do not know exactly which variables are defined
> in the intermediate notmyG() or in some of the functions called "in between",
> I would have thought that using
>
> VariableInMyF <<- something
>
> within myH() bears the danger that I am overwriting
> a variable of name VariableInMyF in notmyG() and "in-between's"
> instead of in myF().
>
> Or did I get something wrong?

I think you did. You seem to be thinking in terms of dynamic scope,
which looks for variables in the caller and then the caller's caller.

Lexical scope addresses exactly this problem.  In lexical scope
variable references are resolved on the basis of how function
definitions are nested in the written code (hence the term lexical).
If you define myH inside myF then free variables in myH are looked up
first in myF and then in the context where myF is defined. How myH is
called does not matter.  Nested functions in Pascal work the same way
if that helps.

[In terms of the internal implementation, the enclosing environment of
the environment of myH is the frame of the call to myF that created
myH.]

Best,

luke


THis is exactly the pro
>
> Thanks for your help
> Peter
>
>
>

-- 
Luke Tierney
Chair, Statistics and Actuarial Science
Ralph E. Wareham Professor of Mathematical Sciences
University of Iowa                  Phone:             319-335-3386
Department of Statistics and        Fax:               319-335-3017
    Actuarial Science
241 Schaeffer Hall                  email:      luke at stat.uiowa.edu
Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu



[Rd] Exchange of information between functions aside from argument/return-value interface
Luke Tierney