rpnプログラムの使い方
本記事の内容はrpn標準版ユーザの方のみを対象としています。
rpnは逆ポーランド記法で書かれた数式を計算するソフトです。逆ポーランド記法自体、通常の数式よりも短く書ける特長がありますが、rpnではキーボードからのタイプを極力少なくすることにも配慮してあります。
実際、関数のすべてが一文字で表現されており、タイプの負担を減らすことに貢献しています。例えば、sin(1)の計算は僅かな3文字のタイプ数です("rpn "の分は省く)。
0.841471
sin(log(3.14)) * cos(3.14)のような計算式(26文字)も、rpnなら僅かに17文字ですね(26文字が17文字になるので、34%の削減)。
-0.910388
rpnに組み込まれている関数は厳選されていますし、ほとんどが関数名の先頭1文字で表してあるため、すぐに覚えられます。キータイプ数の削減は小さなことですが、毎回積み重ねることで、いずれは膨大な時間の節約になることでしょう。
rpnプログラムの短縮記述
rpnはファイルに保存した逆ポーランド記法式を、rpnプログラムとして利用することができます(rpnプログラムの集合をrpnパッケージと称しています)。
例えば、以下のrpn式は1から10の総和を計算するものです。レジスタや繰り返し記号を使えば1行で書けます。
55
タイプ数は38文字です。慣れればrpn式を書くことは簡単ですが、ちょっと面倒ですね。そこで、rpnプログラムのseqプログラムとsumプログラムです。
55
タイプ数も22文字と少なくなりますし、rpn式が分かりやすくなります。rpnプログラムには様々な機能も付加されていますので、1から10までの偶数だけの総和を求めるときにも簡単に書けます。
25
rpnパッケージが充実してくるとrpnプログラムを使う機会が増えてきます。"seq"や"sum"はrpnプログラム(ファイル)の名前なので仕方ないとしても、それ以外のタイプ数を少なくしたいものです。
上のrpn式でも"rpn"から最後の"sum"まで、全体で22文字ありますが、面倒なのはrpnプログラムを指定する"-c"です。"-c"の前後に空白も必要ですし、何度も出てきます。
そこで、rpnプログラムの前に":"を付与することにより、-cオプションと等価な動作になるようにしてあります。つまり、rpn式を以下のように書けます。
22文字が18文字と少なくなりました。18%のタイプ量を削減です。
これも入力に関する極めて小さなショートカットですが、rpnを少しでも手早く、手軽に使うための仕様になります。
"-c"を使う方法は正式なサポート対象です。バッチファイル等で使用される場合は"-c"を使用してください。あくまで":rpnプログラム"はコンソール(DOS窓、コマンドプロンプト)で直接入力する時の簡便法と理解ください。
逆ポーランド的な書き方
":rpnプログラム"の形にすることで、rpnの逆ポーランド記法に対する親和性がより高まります。
つまり、「1 s」の"1をsin関数に適用する"と「10 :seq」の"10をseqプログラムに適用する"が、共にオペランド+オペコードの順であることをイメージできます。
- 1(オペランド)をsin(オペコード)に適用
- 10(オペランド)をseq(オペコード)に適用
オペランド+オペコード形式
rpn式のBNF(バッカス・ナウア記法) rpn式の記述例================================ =============
rpn式 ::= {<expression>}* >rpn 1 2 +
<expression> ::= <operand>|<operand><opcode> >rpn 1 s
<operand> ::= 0..9 >rpn 10 :seq
<opcode> ::= +-*/%r…
*:0回以上の繰り返し
オブジェクト指向的な解釈
rpnをオブジェクトと考えると、メソッドの呼び出しと解釈することもできます。
イメージ |- uniq : C++的な解釈⇒rpn.seq(10) :
|- sort : ※rpnオブジェクト内のseq :
|- seq <-- 10 : メソッドにメッセージと :
|- sum : して10を送る :
: ・・・・・・・・・・・・・・・・・・・・・・・・・・
短縮記述を用いれば、一貫して逆ポーランド的、オブジェクト指向的なスタイルで記述できます。
基礎TOPに戻る
rpnプログラムを実行するには、rpn試用版かrpn標準版が必要です(バージョンの違いはこちら)。
seq, uniq, sortはユーティリティーパッケージに同梱されています。詳しくはプロダクトを参照ください。