Hadley Wickham-2 wrote > > Curry <- function(FUN, ...) { > args <- match.call(expand.dots = FALSE)$... > args$... <- as.name("...") > > env <- parent.frame() > > if (is.name(FUN)) { > fname <- FUN > } else if (is.character(FUN)) { > fname <- as.name(FUN) > } else if (is.function(FUN)){ > fname <- as.name("FUN") > env$FUN <- FUN > } else { > stop("FUN not function or name of function") > } > curry_call <- as.call(c(list(fname), args)) > > f <- eval(call("function", as.pairlist(alist(... = )), curry_call)) > environment(f) <- env > f > } > > But I've probably forgotten something else. Hopefully Luke will chime > in if I'm proceeding down a path that can never be made to work > completely correctly. > I've been playing around with this for a while. One flaw I found - it doesn't handle nested Curries very well (the naive implementation in roxygen/functional does).
e.g.: foo=function(x,y,z) x+y+z Curry(Curry("foo",3),4)(3) # 10 Curry(Curry(foo,3),4)(3) # hangs foo4=function(a,b,c,d) Curry(Curry(Curry("foo4",3),4),1)(3) # hangs I was also curious if there was some trick to force a function eval when the list of arguments got exhausted (for example, a triple Curry on foo above would leave no arguments so would trigger eval into 10). -- View this message in context: http://r.789695.n4.nabble.com/Curry-proposed-new-functional-programming-er-function-tp917654p4631127.html Sent from the R devel mailing list archive at Nabble.com. ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel