ポケット電卓 | rpn入門(中級編) [講座] | 逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓rpnの実践ウェブ   
rpn hacks! アールピーエヌ・ハックスサイトマップ

rpn | 講座 | rpn入門 | rpnの使い方を基本から応用まできちんと学習。

HOME > 講座 > rpn入門 > 中級編 > ポケット電卓 hatena yahoo buzzurl livedoor del.icio.us nifty newsing twitter facebook rss ソーシャルブックマーク

ポケット電卓

 rpnは通常、DOSのコマンドラインからrpn式を伴って入力されます。以下のような例ですね。

  >rpn 1 2 +
  3


すぐに答えが返ってきます。続いて別の計算をするには再度、DOSのコマンドラインから入力するので、DOSの画面は以下のようになっているはずです。

  >rpn 1 2 +
  3
  >rpn 1 2 -
  -1


実物の電卓を使うのをイメージすると、この使い方は卓上の電卓を手元に引き寄せては計算して、また仕舞う行為を毎回繰り返している状態と同じです。

ポケット電卓のように使う

 rpnには上記の入力方式とは別に、rpnを起動した状態でrpn式をその都度、入力する方式があります。例えるとポケット電卓を手にとって、ずっと計算し続けるイメージですね。

  >rpn
            <-- 入力待ち


上の例はDOSプロンプトの">"に続いて、"rpn"を入力後、Enterキーを押した状態です。これでrpn式の入力待ちになります。

rpn式といっても一番短いrpn式は""(何もない)になりますから、そのままEnterキーを押してみましょう。rpnは何もせずに改行だけして、次の入力を待っていますね。

  >rpn
            --> 改行する
            <-- 入力待ち


次に短いrpn式は1つの数値です。"1"を入力してみます。

  >rpn
            --> 改行する
  1         <-- 1を入力
  1         --> 1が返ってくる
            <-- 入力待ち


単に1を返してきます。次は"1 2 +"のようなrpn式を入力してみましょう。

  >rpn
            --> 改行する
  1         <-- 1を入力
  1         --> 1が返ってくる
  1 2 +     <-- 1 2 +を入力
  3         --> 3が返ってくる
            <-- 入力待ち


最後に、"5 !"のような関数を伴ったrpn式を入力してみましょう。

  >rpn
            --> 改行する
  1         <-- 1を入力
  1         --> 1が返ってくる
  1 2 +     <-- 1 2 +を入力
  3         --> 3が返ってくる
  5 !       <-- 5 !を入力
  120       --> 120が返ってくる
              <-- 入力待ち


次々とrpn式を入力するたびに、rpnが計算結果を返してくるのが分かると思います。計算を終わるには^Z(Ctrlキーを押しながらZキーを押す)を押します(最後にエンターキーを入力します)。

  >rpn
            --> 改行する
  1         <-- 1を入力
  1         --> 1が返ってくる
  1 2 +     <-- 1 2 +を入力
  3         --> 3が返ってくる
  5 !       <-- 5 !を入力
  120       --> 120が返ってくる
  ^Z        <-- ^Zを押下(続けてエンターキー)
  >         <-- DOSプロンプトが表示されてコマンド待ち状態


もっと便利な使い方

 rpnをこのように使うとき、より便利にしてくれる機能がスタック操作記号の「,」「.」「x」とレジスタ操作記号の「#」と「@」です。

「.」と「x」、「#」と「@」は既出ですが、「,」は初めて紹介します。「,」は最後の入力数値を記録している記号だと思ってください。「.」と似ているので違いを先に説明します。

  >rpn
  1 . +     <-- 最後のスタック"1"をコピーして足す
  2         --> 答えは2
  1 , +     <-- 最後の入力数値"1"をコピーして足す
  2         --> 答えは2
  1 . + .   <-- 最後のスタック"1"をコピーして足す。最後のスタック"2"をコピー。
  2 2       --> スタックには2と2
  1 . + ,   <-- 最後のスタック"1"をコピーして足す。最後の入力数値"1"をコピー。
  2 1       --> スタックには2と1
  ^Z


「.」と「,」の違いが分かりましたでしょうか。「,」はあくまで最後の入力数値だということです。

さて、この「,」ですが、最後の入力数値をコピーするという機能の他に、前の答えを記憶しているという機能も持っています。例で示しましょう。

  >rpn
  1 2 +     <-- 1 2 +を入力
  3         --> 答えは3
  , 3 +     <-- , 3 +を入力
  6         --> 答えは6
  ^Z


「, 3 +」の部分ですが、この「,」は前の「1 2 +」の答えである3を示しています。従って、「, 3 +」は「3 3 +」に等しいということになります。すると、1から5までの数を合計するには以下のように入力すればいいことになります。

  >rpn
  1         <-- 先に1を入力
  1
  , 2 +     <-- 前の答えに2を加える
  3
  , 3 +     <-- 前の答えに3を加える
  6
  , 4 +     <-- 前の答えに4を加える
  10
  , 5 +     <-- 前の答えに5を加える
  15
  ^Z


今までのやり方で計算してみましょう。

  >rpn 1 2 + 3 + 4 + 5 +
  15


答えは合ってますよね。

警告「,」を使うときはrpn式の一番先頭で使わなければなりません。別の入力数値が先にあると「,」は最後の入力数値を参照するようになります。

本格的に計算してみよう

 これだけ揃っていれば、rpnを起動した状態でかなり複雑な計算ができることになります。

一片が5cmの正方形の紙から、半径1.5cmの円を切り出すとすると残りの紙くずの面積はいくらか。

  >rpn
  5 . *               <-- 一片5cmの正方形の面積を計算
  25                  --> 答えは25
  , #c                <-- 答えをcレジスタに保存
  1.5 #r              <-- 半径1.5cmをrレジスタに保存
  @r . * 3.14 *       <-- 円の面積を計算
  7.065               --> 答えは7.065
  , @c x -            <-- 前の答えからcレジスタを引く(xの交換に注意)
  17.935              --> 17.935が答え
  ^Z


このように、結果を確認しながら計算を続けることができます。この計算経過は以下のrpn式と同じです。

  >rpn 5 . * #c 1.5 #r @r . * 3.14 * @c x -
  17.935


最終的には一行にまとめ上げられますが、計算式が定まっていないときなどは先にrpnを起動しておいてから、気ままに経過を見ながら計算していくスタイルもよいでしょう。

警告文字で作られた図表や式が崩れることがあります。ブラウザによっては固定幅フォントをMSゴシックにするときれいに表示されます。それでも崩れる場合は図表や式をメモ帳にコピー後、閲覧下さい。

警告rpn試用版と標準版(2kリビジョン)はダブルクォートで囲ってください。

rpn 1 2 + ⇒ rpn "1 2 +"
rpn 1 -c foo ⇒ rpn "1" -c "foo"

ダブルクォートは省略できることが多いのですが、慣れない間は囲んだほうが無難です。なお、本ウェブサイトの記事ではrpn標準版(98リビジョン)を使用しているため囲っていません。詳しくは技術サポートの「rpn TIPS参照ください。

注意rpnの障害情報はこちら

警告rpn試用版の場合、複雑なプログラムや処理時間のかかるプログラムの一部には動作しないものがあるかもしれません。あくまで無料提供であることを勘案・了承ください。rpn標準版は、すべてのプログラムが動作します。