TI-Nspire & Lua / スクリプティングのヒント / クロージャを使う 5 / 再帰的なローカル函数を作る
-- 再帰的なローカル函数の定義 local function fact(n) if n == 0 then return 1 else return n * fact(n - 1) end end print(fact(69)) -- 下のような定義の仕方では再帰呼び出しができない。 -- FACT(n - 1) をコンパイルする時点ではまだローカル函数 FACT の定義が途中であるため、存在しないグローバル函数 FACT を呼び出そうとしてしまうからである。 local FACT = function(n) if n == 0 then return 1 else return n * FACT(n - 1) end end print(FACT(69))
-- 下のように定義すれば、FACTORIAL(n - 1) をコンパイルする時点で存在しているローカル変数 FACTORIAL (値はまだ nil であるが) を参照するので問題ない。 local FACTORIAL FACTORIAL = function(n) if n == 0 then return 1 else return n * FACTORIAL(n - 1) end end print(FACTORIAL(69))
参考: