From: jim holtman <jholtman_at_gmail.com>

Date: Mon, 17 Nov 2008 20:50:52 -0500

Date: Mon, 17 Nov 2008 20:50:52 -0500

On Mon, Nov 17, 2008 at 4:28 PM, Wacek Kusnierczyk
<Waclaw.Marcin.Kusnierczyk_at_idi.ntnu.no> wrote:

> the following is a trivialized version of some functional code i tried

*> to use in r:
**>
**> (funcs = lapply(1:5, function(i) function() i))
**> # a list of no-parameter functions, each with its own closure environment,
**> # each supposed to return the corresponding index when applied to no
**> arguments
**>
**> sapply(funcs, function(func) func())
**> # supposed to return c(1,2,3,4,5)
**>
**> there is absolutely nothing unusual in this code, in the context of
**> functional programming.
**> the following is my best translation to python (modulo indexing, which
**> is inessential), where it does what i wanted:
**>
**> funcs = map(lambda i: lambda: i, range(5))
**> map(lambda func: func(), funcs)
**> # [0,1,2,3,4]
**>
**> all these functions have distinct environments:
**>
**> (envs = sapply(funcs, function(func) environment(func)))
**> assign("i", 0, environment(envs[[1]]))
**> sapply(funcs, function(func) func())
**>
**> interestingly, identical says they are all unequal, but compare disagrees.
**>
**> check = function(equal) for (i in 1:4) for (j in i:4+1)
**> print(equal(envs[[i]], envs[[j]]))
**> check(identical)
**> check(compare)
**>
**> compare seems to cast environments to character; for identical, the docs
**> give an example where environments are compared, but compare fails
**> (i.e., succeeds) miserably (the docs do not warn not to compare
**> environments):
**>
**> e1 = new.env(parent=emptyenv())
**> e2 = new.env(parent=emptyenv())
**> assign("foo", "bar", e1)
**> compare(e1, e2)
**> # oops?
**>
**>
**> back to the original example, how come?
**>
**> vQ
**>
**>
**> ----
**> for those curious, try the following in python:
**>
**> map(lambda func: func(), [lambda: i for i in range(5)])
**> map(lambda func: func(), (lambda: i for i in range(5)))
**>
**> ______________________________________________
**> R-help_at_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.
**>
*

-- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem that you are trying to solve? ______________________________________________ R-help_at_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.Received on Tue 18 Nov 2008 - 01:55:01 GMT

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.2.0, at Tue 18 Nov 2008 - 09:30:26 GMT.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help.
Please read the posting
guide before posting to the list.
*