通常、 定義の名前はその定義内に表れません。ただし、 それ以前の(同名の)定義は普通に表れます(訳注: 下記例は再帰呼出しではなくて、 ’/’ の古いバージョンを呼び出しているに過ぎない事に注意。同じ名前の古いバージョンが存在しなければエラーになるが、存在すればエラーにならないので注意。):
1 0 / . \ "Floating-point unidentified fault" in Gforth on some platforms : / ( n1 n2 -- n ) dup 0= if -10 throw \ report division by zero endif / \ old version ; 1 0 /
再帰定義の場合は、 recursive
(非標準) または recurse
を使用できます:
: fac1 ( n -- n! ) recursive dup 0> if dup 1- fac1 * else drop 1 endif ; 7 fac1 . : fac2 ( n -- n! ) dup 0> if dup 1- recurse * else drop 1 endif ; 8 fac2 .
研究課題(assignment): n 番目のフィボナッチ数を計算するための再帰定義を記述してみましょう。
こちらも参照ください (間接再帰に関してもコチラ): See Calls and returns