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