Befunge

http://shinh.skr.jp/koneta/befunge.rb

インタプリタが欲しくなったので書きました…が、ちょっとぐぐってみるとこちらにもあったのであった。

http://mono.kmc.gr.jp/~yhara/w/?Befunge

でもなんかサンプルが動いたり動かなかったりするのでまぁ存在価値はあるかもしれないとかまぁどうでもいいんですが。

Befunge は眺めてみるに Whitespace よりセンスいいなーと思います。ごく普通のスタックマシンなんですが、やはり自分のプログラム領域を編集できるというのは面白い。あと Wikipedia にある Hello, world は結構面白いものだったりします。

http://ja.wikipedia.org/wiki/Befunge#.22Hello.2C_World.21.22.E3.82.92.E5.87.BA.E5.8A.9B.E3.81.99.E3.82.8B

v @_       v
>0"!dlroW"v
v  :#     <
>" ,olleH" v
   ^       <

(0,0) からスタート。 v で下方向に向いて、 > で右を向く。 0 で 0 をスタックに積んで、 "!dlroW" を順にスタックを積んで、また左に進んで、 #: は # は次の命令をスキップする命令なのでスキップ。そんで右向きに ",olleH" を積んで、また左を向いて , の下の ^ まで。

^ は上を向く演算なので、次は , で、スタックから pop して表示する命令なのだけど、これは文字列リテラルの一部を別の方向から侵入することによって再利用してるわけ。ここがなかなか面白いんじゃないかなーと思います。

あとはスタックトップが 0 かどうかをチェックして、 _ による分岐で 0 になるまでぐるぐる回る感じ。 ! も再利用してるのがやはりちょっと面白い。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h