LoginSignup
2
2

More than 5 years have passed since last update.

ズンドコキヨシ with Forth

Last updated at Posted at 2016-03-19

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とかなら私の知らない文字列やクラスを拡張するワードがあるはずなのでもっと楽に書けるはずです。

2
2
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2