如何在R中模拟Lisp的let函数?

Ern*_*t A 3 evaluation functional-programming r

我正在尝试编写一个let允许我执行以下操作的函数:

let(a=2, b=3, a+b)
>>> 5
Run Code Online (Sandbox Code Playgroud)

目前我一直坚持

let <- function(..., expr) {
  with(list(...), quote(expr))
}
Run Code Online (Sandbox Code Playgroud)

这根本不起作用.任何帮助赞赏.

Jos*_*ien 11

这是一种方式:

let <- function(..., expr) {
    expr <- substitute(expr)
    dots <- list(...)
    eval(expr, dots)
}

let(a = 2, b = 3, expr = a+b)
# [1] 5
Run Code Online (Sandbox Code Playgroud)

编辑:或者,如果您不想要为要评估的表达式命名(即将其传递给via expr),并且如果您确定它将始终是最后一个参数,您可以执行类似这样的操作.

let <- function(...) {
    args <- as.list(sys.call())[-1]
    n <- length(args)
    eval(args[[n]], args[-n])
}

let(a = 2, b = 3, a + b)
# [1] 5
Run Code Online (Sandbox Code Playgroud)