mfibR <- local({
memo <- c(1, 1, rep(NA, 1000))
f <- function(x) {
if (x == 0)
return(0)
if (x < 0)
return(NA)
if (x > length(memo))
stop("x too big for implementation")
if (!is.na(memo[x]))
return(memo[x])
ans <- f(x - 2) + f(x - 1)
memo[x] <<- ans
ans
}
})
它没有函数体,但它实际上正确地返回了Fibonacci序列。
答案 0 :(得分:5)
来自?local
帮助页。
local 评估本地环境中的表达式。它是等价的 到evalq除了它的默认参数创建一个新的空 环境。这对于创建匿名递归函数很有用 并且作为一种有限的命名空间特征,因为变量定义于 从外面看不到环境。
请查看local
功能帮助页面中的示例。它显示了如何使用local创建匿名函数。 local
将返回上次评估的表达式。