On Wed, May 20, 2009 at 7:48 AM, Wacek Kusnierczyk
<waclaw.marcin.kusnierc...@idi.ntnu.no> wrote:
> Paulo Grahl wrote:
>> Dear All:
>>
>> I have a question regarding the behavior of functions.
>> Say I define a function that returns another function :
>> A <- function(parameters) {
>>      # calculations w/ parameters returning 'y'
>>      tmpf <- function(x) { # function of 'y' }
>>      return(tmpf)
>> }
>>
>> The value of the parameters are stored in an environment local to the
>> function.
>
> consider this example:
>
>    foo = function(a, b)
>       function(c)
>          if (c) a else b
>
>    x = 1
>    y = 2
>    bar = foo(x, y)
>
>    bar(TRUE)
>    # 1
>    x = 0
>    bar(TRUE)
>    # 1, not 0
>
>    y = 0
>    bar(FALSE)
>    # 0, not 2
>

The last one is due to lazy evaluation.  Try
repeating it with this variation:

   foo2 = function(a, b) {
          force(a); force(b)
          function(c) if (c) a else b
   }

which forces a and b to be evaluated right away.

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to