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

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

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

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

HOME > 講座 > rpn入門 > 中級編 > 入力プロンプト

hatena twitter facebook rss ソーシャルブックマーク

入力プロンプト

 簡単な数式ならよいのですが、プログラムのようにちょっと複雑なものになると、データ入力のためのガイドがあったほうが便利です。どんな数字が必要なのかをユーザに知らせるために、プロンプトとして文字を表示させるというわけです。

ただし、rpnはあくまで電卓ソフトなので、文字の表示は得意ではありません。プロンプトを説明する前に、rpnの文字表示の機能について見てみましょう。

rpnの文字列表示

 文字表示記号の「``」は文字列をそのまま表示します。"Hello."と表示させてみましょう。

  >rpn ``Hello.
  Hello.


文字列の表示はアルファベットだけではなく、ひらかなも可能です。

  >rpn ``おはよう
  おはよう


半角スペースを表示する場合は「`」を使用します。"Hello world!"と表示するには以下のようにします。

  >rpn ``Hello ` ``world!
  Hello world!


"おはよう ございます"なら以下のとおりです。

  >rpn ``おはよう ` ``ございます
  おはよう ございます


うまく分かち書きされていますね。なお、全角スペースを使用するならもっと簡単です。

  >rpn ``おはよう  ございます
  おはよう  ございます


文字列を強制的に改行したいときは「``」を単独で使用します。以下に例を示します。

  >rpn ``おはよう `` ``こんにちわ `` ``こんばんわ
  おはよう
  こんにちわ
  こんばんわ


三つの挨拶が改行されて表示されていますね。細かいところですが、最後の"こんばんわ"も改行したい場合は、以下のrpn式にします。

  >rpn ``おはよう `` ``こんにちわ `` ``こんばんわ ``
  おはよう
  こんにちわ
  こんばんわ
              <--- 改行されている


もちろん、漢字も表示できます。

  >rpn ``東京特許許可局 `` ``バスガス爆発
  東京特許許可局
  バスガス爆発


これらの文字表示機能を使って、データ入力時のプロンプトを表示することになります。

データ入力とプロンプト

 rpnらしい電卓の使い方と言えば、コマンドラインでのアドリブ計算やデータを用意してのリダイレクト計算になります。

  【即興(アドリブ)で計算】
  >rpn 1 2 +
  3

  【リダイレクトで計算】
  >rpn @s + #s -e @s <data
  55


しかし、直前にならないとデータが準備できない場合や、取得したデータの計算結果をその場で伝えなければならない場合には、リダイレクトを使用することができません。だからといって、いちいちアドリブで式を入力するのも大変です。

そんな時、入力記号の「d」を使えば簡単に解決できます。例えば順に人が並んでいて、身長を聞くたびに適正体重を教えてあげるような場面を考えてみます。以下は3人の身長を聞いて、適正体重を教えてあげるrpn式です。

  >rpn d #h @h 100 / . * 22 * -r 3
  150
  49.5
  160
  56.32
  170
  63.58


確かに答えは出ていますが、ちょっと不親切ですよね。データがどんなものか、単位は何かなど入力時点で分からないですよね。

実際、単に数字を打つだけでは間違えやすくなります。そこで、入力のガイドとなるようなプロンプトを表示することが大切です。先ほどの文字表示記号を使えば簡単に実現できます。

  >rpn ``身長(cm)を入力: d #h @h 100 / . * 22 * -r 3
  身長(cm)を入力:150
  49.5
  身長(cm)を入力:160
  56.32
  身長(cm)を入力:170
  63.58


入力プロンプトとして"身長(cm)を入力:"が表示されています。このガイドを見れば身長をセンチメートルで入力することは一目瞭然です。

身長を入力すると、メートルに換算して適正体重を割り出します。これで、体重をその場で伝えることができます。-rオプションの数は適当なのですが、40人いたら-r 40になりますね。

情報適正体重に関する詳しい説明が応用コーナーBMIでわかる適正体重にあります。興味のある人は閲覧してみてください。

ちなみに「d」はENTERキーだけを押すと、0が入力されたものと見なします。
真にリアルタイムな入力記号として「k」があります。これは「d」と違ってユーザからの入力を待ちません。詳細は割愛しますが、主にループ構造を持つプログラムにおいて使用します。

アスキー文字の表示

 少しマニアックな表示機能を紹介します。以下のように文字表示記号の「```」を使用すると、スタック最上段にある数値をアスキーコードとして文字出力します。

  >rpn 41h ``` _ 42h ``` _ 43h ``` _
  ABC


16進数で41はアスキーコードのアルファベットのAに対応します。rpn式で「_」を使ってスタック値を削除しているのは「```」は表示するだけで、スタックの内容を変更しないからです。

     『ASCIIコード表』 (表示可能文字)
      0 1 2 3 4 5 6 7 8 9 A B C D E F
    +--------------------------------
  20|   ! " # $ % & ' ( ) * + , - . /  ※20h未満は通信制御用のため、
  30| 0 1 2 3 4 5 6 7 8 9 : ; < = > ?    表示可能な文字がありません。
  40| @ A B C D E F G H I J K L M N O
  50| P Q R S T U V W X Y Z [ \ ] ^ _
  60| ` a b c d e f g h i j k l m n o  ※Zなら50の行のA列なので、
  70| p q r s t u v w x y z { | } ~      16進で50h+ah=5ah、10進なら90。


この機能を使って、大文字のアルファベット26文字を表示してみましょう。アスキーコードに対応させて、一気に26文字を出力させます。

  >rpn @a ``` 1 + #a -b 41h #a -r 26
  ABCDEFGHIJKLMNOPQRSTUVWXYZ


電卓で音も出せる

 アスキーコードの文字が出力できるということは、ビープ音を出すこともできます。

  >rpn 7 ```


上のrpn式を実行すると、「ピー」という音が聞こえるはずです。なぜなら、アスキーコードの7にはBELL音が定義されているからです。

DOSプロンプトのバージョンによっては「ボン」という音になります。

ちなみにアスキー文字を出力する一番簡単な方法は、「`」記号の直後に10進数のアスキーコードを付与することです。先ほどの音は次のrpn式でも出すことができます。

  >rpn `7


とても簡便ですよね。バッチ処理などでエラーが発生した時の警告音などに使用できます。

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

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

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

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

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

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