More than 1 year has passed since last update.

Python版をいじっていてPythonのバイトコードを解読したり、VMのソースを読んだりしていたらFORTHを思い出したのでやっつけで書いてみました。

: ZUNDOKO
   0             \ ZUNカウンタ
   BEGIN
      2 RANDOM             \ 0 or 1
      IF ." ZUN" 1+ FALSE  \ 'ZUN'を出力し、カウンタを進める。
      ELSE
        ." DOKO"
         DUP 4 >= IF TRUE \ ZUNカウンタの値を複製し、終了条件に達したか判定する。終了ならTOSにTRUEを積む。
         ELSE
             DROP 0 FALSE \ ZUNカウンタを0クリアする。
         THEN
      THEN
      CR                 \ 改行
   UNTIL         \ TOSの終了フラグがTRUEならループを抜ける。
   DROP                  \ ZUNカウンタの値を捨てる。 
   ." KIYOSHI!" CR
;

何がハマったかって、行コメントの記法を忘れていて'\'でなく'#'を入れてスタックが滅茶苦茶になった。
FORTHのワードをほとんど忘れていてあまり練れていないのですが、本物のFORTHプログラマーはこの程度のプログラムなら3行くらいでワンライナーっぽく書くと思います。
また、このプログラムは古い仕様に存在するワードだけで組んだので、GForthとかなら私の知らない文字列やクラスを拡張するワードがあるはずなのでもっと楽に書けるはずです。