此代码显示在调用之前f尚未查找q.
q <- 2
f <- function(x) q + x
f
Run Code Online (Sandbox Code Playgroud)
我想告诉R身体中哪些符号立即查找(在这种情况下list("q"))并相应地进行修改f.怎么做到呢?
在Common Lisp中,这看起来像:
CL-USER> (defparameter q 4)
Q
CL-USER> (let ((bar q))
(defmacro f (x)
`(+ ,bar ,x)))
F
CL-USER> (macroexpand-1 `(f 4))
(+ 4 4)
T
Run Code Online (Sandbox Code Playgroud)
在R中,这可能看起来像:
> q = 2
> f = eval(bquote(function(x) .(q) + x))
> f
function (x)
2 + x
>
Run Code Online (Sandbox Code Playgroud)
由于R被解释,eval与那里的球场相同.使用Common Lisp,如果你不想使用eval,你可以使用一个编译时宏,它带有一个硬编码的'q值',这样每次在代码中使用它时就可以了是指宏在创建时的q值.
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |