Functions returning functions
On Wed, May 20, 2009 at 7:48 AM, Wacek Kusnierczyk
<Waclaw.Marcin.Kusnierczyk at 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.