逆ポーランド記法の関数型言語

MatzさんのArcの解説を読んでいてなぜか、逆ポーランド記法関数型言語が思いついたので、メモ。

  • 記法はすべて逆ポーランド
  • 命令はリテラルか関数、または制御構造や特殊形式
  • リテラルは無条件にスタックに積む
  • 関数はスタック1要素を消費し、新たな関数を積む。この関数は先ほどのスタックをCurry化したもの。たとえば、「1 +」の場合はスタックトップに「1を足す関数へのポインタ」が積まれる。1引数をApplyした結果値が確定したら関数へのポインタではなく値そのものを積む
  • 関数を評価しようとして、もしCurry化した関数へのポインタがスタックトップだった場合、その関数を評価して結果を引数としてApplyする。
  • 後は(例えば制御構造やディクショナリ管理など)、今のところForthと同様の言語仕様、ここはもうちょっと工夫できそう。