自分でライブラリを作る方法 2
戻り値が数値1つの自作関数という縛りがあるためこの簡易関数電卓QSP上で動くゲームやツールを作るのは頭を悩ませることだと思います。
戻り値が1つあればいいのでRETURN 0としてダミーの戻り値を設定すれば「戻り値を考える必要がある」という問題は解決できますが、「意味のない数字が最後に表示される(メイン画面に戻った際に"=0"というのが画面に表示されてしまう)」という問題は解決できません。
しかし、簡易関数電卓QSPではシステム(自作関数電卓QSPのプログラム)上で戻り値がないと判断させることが可能になる方法があります。それがグローバル変数Lの活用です。
変数Lには入力した式の文字数が入っていてこの値が0ならば式の評価が終わった際に何も実行しないという処理が可能になります。つまり、RETURN 0のようにダミーの戻り値を設定してさらにRETURNの前にL=0を入れれば最後に"="と計算結果を表示することが無くなるというわけです。
これによって、システム上は「戻り値を設定しない」と見なされる自作関数を作ることが可能となります。
では、実際に戻り値を設定しない自作関数を作ってみましょう。
《 戻り値を設定しない関数の作成例 》
今日の日付や曜日を表示するTODAY()関数
これを実行すれば"今日は10月11日(日)です"のように表示したいもののみ表示して不必要なもの("="や計算結果など)は表示されないことが分かるでしょう。
実はこの方法は拡張関数ライブラリ5のファイル操作関係では多用されている方法です。このようにL=0:RETURN 0を使えば事実上の縛りはほぼ無くなり何でも出来るようになるわけです。
逆に、せっかく用意されている"式=計算結果"というフォーマットを活かして作りたいという場合もあるでしょう。それについても説明しておきます。
ランダムに"大吉"とか"凶"とか表示されるUNSEI()関数を作ってみましょう。
"式=計算結果"というフォーマットを使って表示するためには拡張関数ライブラリ3に含まれるANS命令を使うのが便利です。このANS命令は本来「"="+計算結果」を表示するべき部分に「"="+任意の文字列」を表示する命令です。
《 ANS命令を使用した関数の作成例 》
あなたの運勢を表示するUNSEI()関数
ちなみにANS命令の中にL=0が含まれているためUNSEI()関数内にはL=0は記述していません。
計算式入力画面でUNSEI()と入力すればUNSEI()=大吉のように結果表示が可能になります。
実は簡易関数電卓QSPに含まれる初期のRVAL()関数は戻り値を文字列にすることが可能(文字列である戻り値をわざわざVAL()で数値化して戻しているのでバラして内包している簡易関数電卓QSPではVAL()の処理を省略しているため「戻り値を文字列にすることが可能」というよりも事実上「文字列が戻り値」といってもいいくらい)であるためANS命令を使用しなくても普通に"大吉"などを戻り値に設定するだけで同様の動作をするUNSEI()関数を作ることが可能になります。
《 戻り値を文字列にした関数の作成例 》
RVAL()関数 ver.1.0 では、プログラムスロット2の1行目が戻り値になっているためそこを書き換えるだけで良いです。
ただし、これは現行の簡易関数電卓QSPが RVAL()関数 ver.1.0 ベースだからこそ可能なことであり、将来的に RVAL()関数 ver.2.x ベースになった場合には正常動作しなくなるためこのような自作関数は非推奨とします。もちろん、現状の簡易関数電卓QSPで使用するならば何ら問題はないし、RVAL()関数 ver.2.x ベースの新しい簡易関数電卓QSPを作るという保証もできないためこのような自作関数を作ったり、それを発表したりするのは自由に行って貰って構いません。
戻り値を文字列にした場合には複数の関数を入力しても最後に記述したもののみしか実行されないためその辺にも注意が必要です。これは、1回の入力で複数のものを動作させたいのでなければ何ら問題はありません。
その点、ANS命令を用いたUNSEI()関数はUNSEI()+UNSEI()のように複数入力すればその入力した数だけ結果を表示してくれます。ただし、2つ目以降はL=0となる関係で画面左端に結果が表示されます。
ANS命令は簡易関数電卓QSPのフォーマットで表示する場合には便利なのですが、同じ場所に何度も表示させることはできません。そのため拡張関数ライブラリ4に含まれるTMR()関数やSTW()関数ではループに入る前に表示Y座標をCSRY-1を変数に入れて値を固定させてループ内ではX座標はL MOD 25とすることでその問題を解決しています。もちろん、L MOD 25は固定的な値であるためループに入る前に変数に入れておいても問題はありません。
というわけで実際に私が用意した拡張関数ライブラリやCAVEのリストを見れば自分でライブラリを作るための方法は粗方分かってもらえるのではないかと思います。
ライブラリを作る時に重要なのは無限ループにならないように気を付けるということです。プチコン3号では無限ループになっても停止ボタンでいつでも簡単に停止ができますが、無限ループが発生するとその都度停止ボタンを押す必要があるため手間がかかるというだけではなく時間がかかる処理を実行しているのか、無限ループになっているのかが実行している画面からは分からないため停止ボタンを押すタイミングが難しいというのが挙げられます。
便利なライブラリをどんどん作っていけばこの簡易関数電卓QSPは極めて便利なツールに変わることでしょう。
RETURN (プチコン3号プログラムのページにもどる) RETURN *MAIN (トップページにもどる)