4
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
    }
})

它没有函数体,但它实际上正确地返回了斐波那契数列。

4

1 回答 1

5

?local帮助页面。

local在本地环境中计算表达式。它与 evalq 等价,只是它的默认参数创建了一个新的空环境。这对于创建匿名递归函数和作为一种有限的命名空间功能很有用,因为在环境中定义的变量从外部不可见。

请浏览local函数帮助页面中的示例。它展示了如何使用 local 创建匿名函数。local将返回最后评估的表达式。

于 2013-11-03T11:42:57.267 回答