Befunge

Befunge は難解プログラミング言語の一つ。手続き型、スタック型で、自己変更的な言語である。実用言語ではない難解プログラミング言語のひとつ。

この言語のプログラムの命令は一次元の列ではなく二次元の格子上に並んでいて、実行する向きを上下左右に変更できる。この言語の任意の1命令は、ソースコード中で1文字で表現される。したがって、ソースコード中の行と桁がプログラムの格子の位置に対応する。

1993 年、Chris Pressey が「コンパイルが困難な言語」として作った。Befunge-93 はプログラムのサイズが 80 桁 25 行に固定されている。Befunge-93 の拡張 (一般化) である Funge-98 にはこの制限は無く、チューリング完全である。さらに Funge-98 には任意次元への拡張やマルチスレッド対応等が含まれている。

プログラム例

"Hello, World!"を出力する 
 v @_       v
 >0"!dlroW"v 
 v  :#     < 
 >" ,olleH" v
    ^       <

5の階乗を出力する 
 5 100p:v
 v *g00:_00g.@
 >00p1-:^

言語仕様 
 プログラムの実行は、格子の左上から右向きに開始する。
 格子の上端は 0 行目、左端は 0 桁目である。
 端に達したら反対側の端へジャンプする。
 整数を要素とするスタックがただ一つ存在する。このスタックは、命令に引数を渡したり、命令の結果を受け取ったりするのに使われる。

命令

制御

リテラル

入出力 

以下、「スタックから y, x をポップする」と書いた場合、「スタックをポップし、その値を y とする。その後で再度スタックをポップし、その値を x とする。」を意味する。

算術および論理演算

スタック操作

メモリ操作

外部リンク 
Befunge-93 Documentation 邦訳 
Javascript Befunge Interpreter(英語)
Esolang WikiにおけるBefungeの記事

BEFUNGE