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 に答える