入力プロンプト
簡単な数式ならよいのですが、プログラムのようにちょっと複雑なものになると、データ入力のためのガイドがあったほうが便利です。どんな数字が必要なのかをユーザに知らせるために、プロンプトとして文字を表示させるというわけです。
ただし、rpnはあくまで電卓ソフトなので、文字の表示は得意ではありません。プロンプトを説明する前に、rpnの文字表示の機能について見てみましょう。
rpnの文字列表示
文字表示記号の「``」は文字列をそのまま表示します。"Hello."と表示させてみましょう。
Hello.
文字列の表示はアルファベットだけではなく、ひらかなも可能です。
おはよう
半角スペースを表示する場合は「`」を使用します。"Hello world!"と表示するには以下のようにします。
Hello world!
"おはよう ございます"なら以下のとおりです。
おはよう ございます
うまく分かち書きされていますね。なお、全角スペースを使用するならもっと簡単です。
おはよう ございます
文字列を強制的に改行したいときは「``」を単独で使用します。以下に例を示します。
おはよう
こんにちわ
こんばんわ
三つの挨拶が改行されて表示されていますね。細かいところですが、最後の"こんばんわ"も改行したい場合は、以下のrpn式にします。
おはよう
こんにちわ
こんばんわ
<--- 改行されている
もちろん、漢字も表示できます。
東京特許許可局
バスガス爆発
これらの文字表示機能を使って、データ入力時のプロンプトを表示することになります。
データ入力とプロンプト
rpnらしい電卓の使い方と言えば、コマンドラインでのアドリブ計算やデータを用意してのリダイレクト計算になります。
>rpn 1 2 +
3
【リダイレクトで計算】
>rpn @s + #s -e @s <data
55
しかし、直前にならないとデータが準備できない場合や、取得したデータの計算結果をその場で伝えなければならない場合には、リダイレクトを使用することができません。だからといって、いちいちアドリブで式を入力するのも大変です。
そんな時、入力記号の「d」を使えば簡単に解決できます。例えば順に人が並んでいて、身長を聞くたびに適正体重を教えてあげるような場面を考えてみます。以下は3人の身長を聞いて、適正体重を教えてあげるrpn式です。
150
49.5
160
56.32
170
63.58
確かに答えは出ていますが、ちょっと不親切ですよね。データがどんなものか、単位は何かなど入力時点で分からないですよね。
実際、単に数字を打つだけでは間違えやすくなります。そこで、入力のガイドとなるようなプロンプトを表示することが大切です。先ほどの文字表示記号を使えば簡単に実現できます。
身長(cm)を入力:150
49.5
身長(cm)を入力:160
56.32
身長(cm)を入力:170
63.58
入力プロンプトとして"身長(cm)を入力:"が表示されています。このガイドを見れば身長をセンチメートルで入力することは一目瞭然です。
身長を入力すると、メートルに換算して適正体重を割り出します。これで、体重をその場で伝えることができます。-rオプションの数は適当なのですが、40人いたら-r 40になりますね。
適正体重に関する詳しい説明が応用コーナーのBMIでわかる適正体重にあります。興味のある人は閲覧してみてください。
ちなみに「d」はENTERキーだけを押すと、0が入力されたものと見なします。
真にリアルタイムな入力記号として「k」があります。これは「d」と違ってユーザからの入力を待ちません。詳細は割愛しますが、主にループ構造を持つプログラムにおいて使用します。
アスキー文字の表示
少しマニアックな表示機能を紹介します。以下のように文字表示記号の「```」を使用すると、スタック最上段にある数値をアスキーコードとして文字出力します。
ABC
16進数で41はアスキーコードのアルファベットのAに対応します。rpn式で「_」を使ってスタック値を削除しているのは「```」は表示するだけで、スタックの内容を変更しないからです。
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文字を出力させます。
ABCDEFGHIJKLMNOPQRSTUVWXYZ
電卓で音も出せる
アスキーコードの文字が出力できるということは、ビープ音を出すこともできます。
上のrpn式を実行すると、「ピー」という音が聞こえるはずです。なぜなら、アスキーコードの7にはBELL音が定義されているからです。
DOSプロンプトのバージョンによっては「ボン」という音になります。
ちなみにアスキー文字を出力する一番簡単な方法は、「`」記号の直後に10進数のアスキーコードを付与することです。先ほどの音は次のrpn式でも出すことができます。
とても簡便ですよね。バッチ処理などでエラーが発生した時の警告音などに使用できます。