# [Rd] Curry: proposed new functional programming, er, function.

Gabor Grothendieck ggrothendieck at gmail.com
Wed May 4 16:59:17 CEST 2011

```On Wed, May 4, 2011 at 10:40 AM, Ravi Varadhan <rvaradhan at jhmi.edu> wrote:
> I too would like this (being an Indian!).
>
> Here is an example that came up just yesterday with regards to solving a quadrature problem using the "cubature" package.  The adaptIntegrate function does not allow additional arguments via ...
>
> Uwe suggested a work around, but `Curry' would solve it nicely (and it also tastes better!):
>
> Curry = function(FUN,...) {
> .orig = list(...)
> function(...) do.call(FUN,c(.orig, list(...)))
> }
>
> require(cubature)
>
> f <- function(x, a) cos(2*pi*x*a)  # a simple test function
>
> # this works
> a <- 0.2
> adaptIntegrate(function(x, argA=a) f(x, a=argA), lower=0, upper=2)
>
> # but this doesn't work
> rm(a)
> adaptIntegrate(function(x, argA=a) f(x, a=argA), lower=0, upper=2, a=0.2)
>
>
> # Use of Curry
> adaptIntegrate(Curry(f, a=0.2), lower=0, upper=2)
>

Here is another approach. If we preface any function with gsubfn's fn\$
then it will turn formulas (subject to certain rules to determine
which to pay attention to) into functions.

1. Here it is applied to the cubature example

> library(cubature)
> library(gsubfn)
>
> fn\$adaptIntegrate(~ f(x, 0.2), lower=0, upper=2)
\$integral
 0.4677446

\$error
 1.247382e-14

\$functionEvaluations
 15

\$returnCode
 0

2. and here is the heatmap example redone.  The example line is to
compute x so that the code is self contained:

library(gsubfn)
example(heatmap)

fn\$heatmap(x, hclustfun = ~ hclust(x, method="average"))

--
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com

```