俺の無名関数が何かおかしい

適当な定数を定義する(なくてもいいんだけど、わかりやすさ的に定義したい)。

a <- 3

そして、以下のような無名関数かつクロージャーを使ったコードを実行してみる。

> g1 <- function(y){function(x){x+y+a}}(1)
> g2 <- (function(y){function(x){x+y+a}})(1)
> g1(7)
[1] 11
> g2(7)
[1] 11

・・・うん、ちゃんと動いてる。

しかし、無名関数の引数をなしにすると、括弧をつけないとだめになる。

> f1 <- function(){function(x){x+a}}()
> f2 <- (function(){function(x){x+a}})()
> f1(7)
Error in f1(7) : unused argument (7)
> f2(7)
[1] 10

なんだこれ、評価順序の問題か?

> f1
function(){function(x){x+a}}()
> f2
function(x){x+a}
<environment: 0x12230260>

・・・評価されてねぇのか。