講座サポート [支援] | 逆ポーランド電卓の実践ウェブ rpn hacks!

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

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

rpn | 各種講座に関連するサポートと便利なTIPS。

HOME > 支援 > 講座サポート hatena yahoo buzzurl livedoor del.icio.us nifty newsing twitter facebook rss ソーシャルブックマーク

講座のサポート

正誤情報のお知らせ

現在、ありません。

メンテナンス情報のお知らせ  

午前4時から午前9時までの時間帯にサーバ全体のメンテナンスを実施する場合があります。講座が閲覧できなくなる時間は15分から30分程度です。

その他のサポート

ブラウザでPDFが開かない

PDFを表示できていたのに"Could not launch Acrobat"というメッセージと共に、突然表示できなくなることがあります。この場合、以下の手順に従うとAdobe Readerを再インストールせずに回復できる場合があります。

  • Adobe Readerをデスクトップから開いて、メニューの「編集->環境設定」を選びます。
  • 分類からインターネットをクリックして、WebブラウザオプションのPDFをブラウザに表示、Web表示用に最適化を許可、バックグラウンドでのダウンロードを許可のチェックボックスを全て外してOKボタンを押します。
  • Adobe Readerを終了して、再度、Adobe Readerを起動します。
  • 同じことを行い、今度はチェックボックスを全部チェックしてOKボタンを押して、Adobe Readerを終了します。
PDFPDFが表示されるまで数分待ってみてください。うまくいけば、PDFが表示できるようになっています。また、ブラウザのタブをたくさん開いていると、メモリ不足でPDFが開かない場合もあるようです。タブを減らしてPDF表示を試してみてください。パソコンのリセットも行なうといいかもしれません。

パイプを使った計算を解読する方法  

rpnで計算するときは、以下のようにパイプで繋げることを多用します。

  >rpn @n 1 + #n @n -r 5 | rpn . * | rpn -c sum
  55


何をやっているか分からない場合は、次のようにパイプを徐々に繋げて確認していくのがいいでしょう。

  >rpn @n 1 + #n @n -r 5
  1
  2
  3
  4
  5

  >rpn @n 1 + #n @n -r 5 | rpn . *
  1
  4
  9
  16
  25

  >rpn @n 1 + #n @n -r 5 | rpn . * | rpn -c sum
  55


rpnを使いはじめのときは、パイプの区切りを意識しながら計算過程を確認していってください。慣れてしまえば一気にパイプで繋いで計算できるようになります。

また、以下のように一時ファイルにリダイレクトすることで、中間の計算過程をメモ帳などで確認することができます。

  >rpn @n 1 + #n @n -r 5 >tmp1.txt
  >rpn . * <tmp1.txt >tmp2.txt
  >rpn -c sum <tmp2.txt
  55
  …その後、メモ帳でtmp1.txtとtmp2.txtを確認する。

注意パイプを多く繋いだときに発生する可能性がある障害と対策はこちらです。

グラフの飾り付けにnpdを使わない方法  

rpnを使った計算では、xypやnpdと協力しながら計算後のグラフに飾り付けをすることが多くあります。例えば、次の「y=x^2」のグラフを描くときも、rpnで計算をして、xypでグラフ化し、最後にnpdで修飾することが定番です。

  >rpn @x 1 + #x @x @x . * -r 10 | xyp -x,10 -y,100 -s1,25 -m | npd
  ^y 100                                 *
  |
  |    .................             *
  -   .                 .
  |   . xの値が増えると .
  |   . yの値は急激に、 .        *
  |   . 増えていきます。.
  -    .................     *
  |
  |                      *
  |
  -                  *          2
  |              *        y=x のグラフ
  |          *                           x
  |o *   *                              10
  +--|---|---|---|---|---|---|---|---|--->


しかし、npdは必須ではありません。使いやすいエディタがあればそちらを使うのも方法です。npdを無視するには、以下のように「| npd」を抜きます。

  >rpn @x 1 + #x @x @x . * -r 10 | xyp -x,10 -y,100 -s1,25 -m
  ^y 100                                 *
  |
  |                                  *
  -
  |
  |                              *
  |
  -                          *
  |
  |                      *
  |
  -                  *
  |              *
  |          *                           x
  |o *   *                              10
  +--|---|---|---|---|---|---|---|---|--->


他のエディタで飾り付けをしたい場合は、一旦tmpファイルに保存してから修正します。

  >rpn @x 1 + #x @x @x . * -r 10 | xyp -x,10 -y,100 -s1,25 -m >tmp
  …その後、エディタで"tmp"ファイルを開いて加筆修正。

データの列結合にpasteを使わない方法  

複数のファイルに格納された行列データを、pasteというコマンドで横に繋げること(列結合)があります。ただし、pasteはMS-DOSに含まれていませんので、rpnのpasteプログラムを使って、同じことを行う方法を説明します。

まず、d1、d2、d3というファイルに以下のようなデータがあるとします。

  d1         d2          d3
  +------    +------    +------
  |1  1      |1  1      |1  1
  |2  2      |2  4      |2  4
  |3  3      |3  6      |3  9
  |4  4      |4  8      |4  16
  |5  5      |5  10     |5  25


pasteコマンドで横に繋げたデータをxypでグラフ化すると以下になります。

  >paste d1 d2 d3 | xyp -x,5 -y,25 -k3 -s1,5 -m
  ^y 25                                  -
  |
  -
  |
  |
  -                              -
  |
  |
  -
  |                      -               +
  |                              +
  -                      +
  |              -               *       *
  |              *       *               x
  |o     -                               5
  +------|-------|-------|-------|------->


この作業をrpnのpasteプログラムで行う方法は次のとおりです。

  >type d1 >tmp
  >type d2 >>tmp
  >type d3 >>tmp
  >rpn 3 -c paste <tmp | xyp -x,5 -y,25 -k3 -s1,5 -m
  ^y 25                                  -
  |
  -
  |
  |
  -                              -
  |
  |
  -
  |                      -               +
  |                              +
  -                      +
  |              -               *       *
  |              *       *               x
  |o     -                               5
  +------|-------|-------|-------|------->


d1ファイルからd3ファイルを準備するところまでは同じです。

  • d1ファイルをtmpファイルにリダイレクトします。
  • d2ファイルとd3ファイルを順次、追加リダイレクトします。
  • tmpファイルをrpnのpasteプログラムに渡します。
  • 結果をパイプで繋いで、xypでグラフ表示させます。

これで、rpnのpasteコマンドを使って、MS-DOSのpasteコマンドと同じ結果が得られます。なお、tmpファイルに格納されるデータの総数が1000程度以内としてください。

情報詳しくはpakage入門(ユーティリティー編)の行列の結合を参照してください。

ファイルの横結合にDOSコマンドのpasteを使う方法  

複数のファイルをpasteというコマンドで横に繋げることができます。ただし、pasteはMS-DOSに含まれていませんので、インターネット等でフリーのプログラムを探す必要がありました。

過去にはpasteプログラムが多くあったのですが、最近がほとんどないようです。そこで、rpn試用版、rpn標準版を利用している人に、テキストファイルを横結合するpasteプログラムを無料で提供します。このpasteプログラムを使えば以下のように複数のファイルを横方向に結合できます。

  >type file1
  1
  2
  3

  >type file2
  1
  2
  3

  >paste file1 file2
  1       1
  2       2
  3       3


結合できるファイル数は9個までになります。また、結合するファイルは同じ行数であることが前提ですが、行数が以下の条件を満たしていれば意図したとおりに動作します。

  file1 ≧ file2  ≧ … ≧ file9


例:file1が3行、file2が2行、file3が1行の3つのファイルをpasteで横結合すると以下のようになります。

  >paste file1 file2 file3
  1       1       1
  2       2
  3


pasteプログラムのダウンロード  

  • pasteプログラムのZIPファイルをダウンロードしてください。
  • ダウンロードしたZIPファイルをダブルクリックするとpaste.exeが表示されます。
  • paste.exeを格納したいフォルダにドラッグすると以下のダイアログが出てきます。
  • パスワードを入力してください。一致していれば、paste.exeが解凍されます。
      ※paste.zipのダウンロードはこちら


  +-------------------------------------------------+
  |  パスワードの入力                                  |
  +-------------------------------------------------+
  |                                        +-----+  |
  |  ファイル'paste.exe'はパスワードで保護されて  | OK  |  |
  |  います。 パスワードを入力してください。    +-----+  |
  |                                                 |
  |              +----------------------+  +-----+  |
  |  パスワード(P): |                      |  |キャンセル|  |
  |              +----------------------+  +-----+  |
  +-------------------------------------------------+


情報rpn標準版を申し込んだときに送付された、メールに記載されているダウンロード先URLのxxxの部分とyyyの部分を足したものがパスワードです。

パスワードhttp://xxx.rpn.jp/yyy/rpn… ←xxxが123、yyyがabcだとしたら123abcです。

rpnの引数を指定する簡便な方法  

ファイルに以下のようなデータが格納されているとして、1行内で並べ替えをするrpnプログラムにsort'があります。

  +-- data.txt ---
  |5 4 3 2 1
  +------------

  >rpn -c sort' <data.txt
  1 2 3 4 5


echoコマンドから引数を渡してもらっても同様に計算できます。

  >echo 5 4 3 2 1 | rpn -c sort'


sort'プログラムとデータは完全に分離されているのですが、データを引数として渡すときには以下のような簡便法があります。

  >rpn 5 4 3 2 1 -c sort'
  1 2 3 4 5


他の全てのrpnプログラムにも同様な操作が可能です。例えば、データをシャッフルするshuffle'プログラムも以下のように記述できます。

  >rpn 1 2 3 4 5 -c shuffle'
  2 3 5 4 1


引数が必要なrpnプログラムの場合

rpnプログラムではオプションとして数値を指定する場合があります。例えば、fold'プログラムは何番目の数字で折り返すか指定することが必要です。

  >rpn 2 -c fold' <data.txt
  5 4
  3 2
  1


このようなrpnプログラムの場合でも簡便法があります。

  >rpn 5 4 3 2 1 2 -c fold'
  5 4
  3 2
  1


「-c」の前の2がfold'プログラムへの引数になります。基本的に「'」記号の付く、1行データ内での操作を行なうrpnプログラムには便利な方法になります。

空ファイルにnullを使わない方法  

カレンダー・システムパッケージのnullプログラムを使うと、空ファイルを作り出すことできます。

一部のrpnプログラムでは、この空ファイルを受け取ったときに対話モードに入るように設計されているのですが、敢えてnullプログラムを使わなくてもDOSの機能で代用することができます。

以下はnullプログラムを使う方法です。

  >rpn -c null | rpn -c cal
  rpn [年月日] -c cal <stdin
  年=1969
  月=7
  日=20
        1969年 7月
   日 月 火 水 木 金 土
          1  2  3  4  5
    6  7  8  9 10 11 12
   13 14 15 16 17 18 19
   20 21 22 23 24 25 26
   27 28 29 30 31


これと同じ効果をDOSの機能で代用できます。

  >rpn -c cal <nul
  rpn [年月日] -c cal <stdin
  年=1969
  月=7
  日=20
        1969年 7月
   日 月 火 水 木 金 土
          1  2  3  4  5
    6  7  8  9 10 11 12
   13 14 15 16 17 18 19
   20 21 22 23 24 25 26
   27 28 29 30 31


この方法は対話型をサポートする全てのrpnプログラムに適用できます。どちらでも気に入った方法を使用してください。

情報Windows95/98では"<nul"で動作しないケースがあります。