Langs

Last-modified: 2008-06-16 (月) 13:48:17

Forth

(08.05.07)
トップバッターは成行きでforth。

  • Win32Forth
    • ダウンロードサイト(sourceforge)
    • IDEつきの本格的(?)な処理系の模様。
    • オブジェクト指向でもあるらしい。
    • いじると面白そうだけど、Forthそのものには(あまり)興味ないしなー。RPNに興味持って、処理系作るの楽そうで、アプリケーション拡張言語なんかに向いていそうで、調べていくうちにForthに行き当たっただけだもんな。

RPN

(08.06.16)

「PC上で使えるRPNの電卓」が欲しくて、今Rubyでかりかり書いている。古のUnix dcみたいな、CUIで使うヤツだ。「RPN電卓」の実装はN年ぶり。

Windows上のRPN電卓は既に何十種類も存在する。HP電卓のエミュレータもある。なぜわざわざ自分で書くのかというと、

  1. 「電卓」のボタンをマウスでクリックするのは大変使いづらい。キーボードからも使いづらい。
  2. プログラマブルな電卓が欲しい。HP電卓エミュレータでプログラムを書くというのは何か倒錯的な気がする。

そんなこんなで軽い気持で取りかかったんだが、Rubyみたいな超高水準言語を使うと楽だわ。

  1. まず、スタックの実装で悩まなくてよい
  2. 文字列の取扱いにも悩まなくてよい
  3. トークンの切出しにも悩まなくてよい

昔はいろいろ苦しんだことを殆どスルーできて、フロー制御もつるっと書けた。一通り出来上がってみると、「RPN + CUI」の楽さをしみじみ感じる。数値を放り込んで演算を指定してやるだけでいいなんて、なんて気軽なんでしょう。演算子の優先順位とか括弧とか気にしなくてよいのはなんと身軽なんでしょう。やっぱり電卓はRPNに限るんじゃないか。

演算定義(Forthでいうコロン定義)を実装して、フロー制御も実装して、複雑な演算を書けるようになると、また様様なことが見えてくる。「スタック指向」の奥の深さとか。Forthのスタック操作ワードはよく練られた「必要十分」なセットだなあ、とか(pickやrollは多分なくてもよい)。すべての演算がスタックでつながっていることの意味や功罪とか。