Forth で無名関数の再帰
Perl で JS の arguments.callee 的なことしようと思ってハマった - IT戦記 の件を Forth で。
Forth なら recurse がある。
:noname dup if dup . 1 - recurse else . then ; ok 10 swap ok .s <2> 10 47312420583688 ok execute 10 9 8 7 6 5 4 3 2 1 0 ok
ところが、名前付きの関数で普通に再帰しようとすると
: foo ." hello" foo ; *the terminal*:1: Undefined word : foo ." hello" foo ; ^^^
とエラーになる。
さらに、既に定義してあれば古い定義が呼ばれる。
: bar ." World!" ; ok : bar cr ." Hello " bar ; redefined bar ok bar Hello World! ok