逆ポーランド記法
1 + 2 は、逆ポーランド記法で、1 2 + となる。
(1 + 2) * (3 - 4) は、 1 2 + 3 4 - * だ。
逆ポーランド記法なんて読めないと思うかもしれないが、日本語だと思えばスラスラ読める。
Forthの系譜、逆ポーランド記法の
Joy や Factor をちょっと見てみた。
もしかしたら直接にスタックを記述していく逆ポーランド記法のほうが、CPSを書くのに向いているかもしれないと思ったからだ。
継続 = 途中の計算状態 も、大雑把にいえば、スタックの状態のことだし。
それにしても、階乗の再帰が、
factorial == [0 =] [pop 1] [dup 1 - factorial *] ifte
になるのか・・・。if文の導入あたりから、なんだか雲行きが怪しくなってきた。
LISP がポーランド記法なわけだし、慣れれば読めるようになるか?
CPSで階乗を書くとこうなることを考えれば、
(define (factorial n cont) (if (= n 0) (cont 1) (factorial (- n 1) (lambda (x) (cont (* n x))))))
逆ポーランド記法も捨てたものではないかも。