Rの式の構造をS式で表現する関数

ソース:gist:392146 · GitHub
Rが如何にLispに似ているかが分かる。

cmd.img <- function(exp, filename) {
     filename <- paste(filename, ".png", sep="")
     png(filename)
     eval(substitute(exp))
     dev.off()
     c(pre(capture.output(substitute(exp))),
       img(filename),
       br)
}

は↓の構造をもっている。

(<- cmd.img
    (function (exp filename)
        ({ (<- filename (paste filename ".png" ""))
           (png filename)
           (eval (substitute exp))
           (dev.off)
           (c (pre (capture.output (substitute exp)))
              (img filename)
              br))
        "function (exp, filename) {
              filename <- paste(filename, \".png\", sep=\"\");
              ...(中略)...
         }"))
  • 「{」がSchemeの「begin」・CommonLispの「PROGN」のような役割を果たしている。
  • functionはparameter,body以外に自分のソースコードを保持している。