Recall()関数

  • 参考記事はこちら
  • 関数の中から、その関数自身を呼び出そう
fib <- function(n){
   if(n<=2) { if(n>=0) 1 else 0 } else fib(n-1) + fib(n-2)
}

fib(10)
  • 今、fib()関数の名称変更をしたとする
fibonacci <- fib; rm(fib)
  • 元のfib()、今のfibonacci()の中ではfib()関数を使っているが、それはもうないので、以下の処理はエラーになる
fibonacci(10) # 55
  • 自身を呼び出すのに自身の(変更するかもしれない)「名称」を使う代わりに、「自身」を意味するRecallを使うと、名称変更しても、使い続けられる
fib <- function(n){
   if(n<=2) { if(n>=0) 1 else 0 } else Recall(n-1) + Recall(n-2)
}
fibonacci <- fib; rm(fib)
fibonacci(10) # 55
  • 動作の具合は以下の通り
> fib <- function(n){
+    if(n<=2) { if(n>=0) 1 else 0 } else fib(n-1) + fib(n-2)
+ }
> 
> fib(10)
[1] 55
> 
> fibonacci <- fib; rm(fib)
> 
> fibonacci(10) # 55
 以下にエラー fibonacci(10) :  関数 "fib" を見つけることができませんでした 
> 
> fib <- function(n){
+    if(n<=2) { if(n>=0) 1 else 0 } else Recall(n-1) + Recall(n-2)
+ }
> fibonacci <- fib; rm(fib)
> fibonacci(10) # 55
[1] 55