結果は5

lambda - yaotti's diaryのをRでやろうとしたけど、かっこよくできない。

当たり前だけど、無名関数自体は以下のように書ける。

function(a){function(b){a+b}}

しかし、これのに値を入れても5を返してくれない。

> function(a){function(b){a+b}}(10)(5)
function(a){function(b){a+b}}(10)(5)

で、かっこを付けると値も返してくれたなーというのを思い出した。

> aaa <- 10-5
> (aaa <- 10-5)
[1] 5

じゃあ、これで解決か、と思ったが値を返してくれるのは代入のコンテクストで、ということのようだ。

> (function(a){function(b){a+b}}(10)(5))
function(a){function(b){a+b}}(10)(5)

もちろん、名前を付ければ速攻で解決する。

> hoge <- function(a){function(b){a-b}}
> hoge(10)(5)
[1] 5

しかし、名前を付けるとかだめである。無名関数でなんぼ、である。これで返してくれるか、これとほぼ等価な感じでできないと。

function(a){function(b){a+b}}(10)(5)

色々やってみる

sapplyで逃げる

できたけど、なんか嫌だな。。。

> sapply(10,function(a){sapply(5,function(b){a-b})})
[1] 5
Mapでどうだ

リストがひどいことになってるけど、返ってはくるwww。

> Map(function(a){Map(function(b)a-b,5)},10)
[[1]]
[[1]][[1]]
[1] 5

うーん。。。

何かいい方法が思いうかばないな。。。別に何かに使うというわけではないんだけど、気になる。

というわけで誰かかっこいい解法を知っていたら教えてください><

追記

Twitterで教えてもらいました。そうか、このかっこの位置なら行けるのか。なるほどね。

>  ( function(a){function(b){a-b}} )(10)(5) 
[1] 5