R、関数呼び出し、substituteの挙動
Rについては大変面白い言語なので(言語仕様的に)いずれ紹介エントリでも書こうかと思っている。
まあそれはともかく。
> x<-100 > substitute(x) x # まあそうですね > (function (x) substitute(x))(hoge) hoge #substituteの引数が評価されてる……? > p <- function(f,x) f(x) > pp <- function(f,x) p(f,x) > p(substitute,hoge) hoge # 同じく > pp(substitute,hoge) x # ...?
この挙動は、おそらく引数が遅延評価されていることに由来する。
また、渡された引数を丸投げするだけの関数 function(x) f(x) もf呼び出し時に新たなPromiseを生成することを示唆している。
……と思うが、納得のいく説明がまだ思いつかない。
たとえばSchemeのスペシャルフォームのように、substituteだけ呼び出し時に特別扱いされているとは考えたくないが……*1。
*1:ださいので