つきいち日記へ戻る  

プログラマブル関数電卓 EL-5250 その4

2005年5月13日 22:49:29

(続き)

●プログラム機能

 EL-5250のプログラムはBASICの書式に近い。必要最小限のエディタが付いていて、4096バイトの記憶容量ぎりぎりまで、最大99個のプログラムを作ることができる。
 残念なことに、プログラム間呼び出しや、明示的な配列がないので本格的なプログラミングは無理である。同様のキーストロークを節約するための機能、と考えればよい。しかし、それにしては、計算機言語としての仕掛けはほぼ完備している。
 下位機種(?)のEL-5060には、配列もリストもあるので、統合されていれば、どんなによかったかと思えるのだが、後の祭りで、数年後の新シリーズ(出ればだが)に期待しよう。
 とはいえ、EL-5250のプログラミング機能でも十分に楽しめる。これが活用できなければマニアとしては恥ずかしい。ということで、以下、プログラム機能を見てゆくことにする。
 なお、本ページに例は出てこないので、BASIC等を知らない方には、以下、多少読むのがつらいと思う。

▼代入
  S=1┌2(A+B)×H
 といった風に、変数が左辺にある方程式の形であるが、この場合は方程式ではなく、右辺を計算してから左辺の変数Sの値を更新せよ、ということである。計算機の世界では、この動作を「代入」と呼ぶ。S=まではBASICと同じ書き方だが、右辺はEL-5250の表現となる。BASICなら「1/2*(A+B)*H」などとなる。
  H=H+1
 などは、数学的に考えると訳が分からないが、変数Hの値に1を足せ、ということである。計算機言語をやっている人には、自然に出る表現で、しかも頻出する。

 マニュアルには、はっきり書かれていないが、代入の効果のある書き方が他にも少数ある。

  1M+
 変数Mだけは特別で、[M+]のキーがある。このキーは計算を完了してから値を変数Mに足せ、という動作であるから、結局変数Mの値は更新される。ループの回数を数える変数にすれば便利と思う。当然[M-]も同様に使える。
 仕様のようなバグのような感じがするのは、先祖のEL-5120では[M+]キーがなかったからであろう。

  A,B→rθ
  C,D→xy
 座標変換の操作である。[→rθ]はC言語で言うatan2()つまり、(180°ではなく)360°の逆正接関数として使える。[→rθ]は変数Rとθを更新し、[→xy]は変数XとYを更新する。変数の更新を止めることはできない。
 あまり意味はないが、
  E=A,B→rθ
 という書き方もでき、Rの値がEにも代入される。

  Data x,y など
 プログラム機能の間だけ有効な統計用メモリがある。統計モードとほぼ同じ動作である。だから、Σxなどが集計用メモリとして使えないことはない。Σx2なども同時計算されるので、効率は良くないだろう。xのところには、式が書ける。

 なお、ローカル変数は、実行開始時に未代入の状態になり、いきなり参照しようとすると、値の入力が求められる。計算機言語における本来のローカル変数の動きに近い。しかし、プログラムの相互呼び出しはできないので、やや虚しい仕様となった。

▼入出力
◇Print 変数   変数名が一行、その値が次行に表示される
◇Print"定文字列 案内文字等の表示。アルファベット以外も可
◇Input 変数   値の入力。「変数名=?」の案内が表示される
◇Wait [数値]   指定秒間、動作を止める。[数値]がなければキーの打鍵を待つ
◇Clrt      画面を消去する

 一見充実しているが、「Print」は、式は書けず、変数の値しか表示できず、間の抜けた2行表示となる(一行で表示できるように設計されているのに…)。「Print"」も、必ず1行使ってしまう。
 変数名の表示は便利なようで、実際は有害である。改行は制御できた方が良かった。

▼制御構造
◇Rem 定文字列 注釈。単なるメモ
◇Label 定文字列 gotoなどの飛び先。いわゆるラベル
◇If 条件式 Goto 定文字列
◇Goto 定文字列
◇End
 1プログラムにLabelは20個まで使える。定文字列の1字ごとに1バイト費やすので、短い方が精神衛生上は安心。アルファベットでなく数字でもよい。

◇Gosub 定文字列
◇Return
 プログラム内でのサブルーチン呼び出しができる。Gosubの存在は、プログラム言語を目指していた証拠と思える。

 「else if」がないので、多重分岐ではLabelが多くなってしまいそう。if P goto Lはあってもよいが、if P1 then /行/ else if P2 then /行/ else /行/ end ifの形式は欲しかった。if P returnもあってもよい。
 Remは、プログラム間呼び出しがなければ、ほとんど意味ないと思う。

▼等式と不等式
 =  <  <=  >=  >  ≠
 Ifの条件の中でのみ、等式と不等式として使用できる。

▼統計
◇STATx   Data x   Data x,w
◇STATxy  Data x,y  Data x,y,w
 wは重みで、データ数のことである。
 すてきな統計モードが別にあるから、意義が分かりにくい機能で、EL-5120との互換性のために残されたようだ。

▼整数化など
◇abs 絶対値
 単純に絶対値として利用する以外に、折れ線関数を作るときに使える。
◇int 引数の値を超えない最大の整数(切り捨て)
 BASICを知っている人にはおなじみの整数化関数。グラフを書くと分かるが、ipartよりも素直な形をしている。
◇ipart 整数部分
◇fpart 少数部分(符号を引き継ぐ)
 ipartはFORTRAN時代からの関数で、-1.23なら-1となる(intなら-2)。fpartは、その残りの成分であり、整合性が取れている。
◇⇒RAND 0〜0.999 乱数の「種」。0は通常の疑似乱数。
◇random 0〜0.999  r.dice 1〜6  r.coin 0,1  r.int  0〜99
 乱数は4種類になった。r.diceは改良と言える。

 なぜか剰余はない。他の関数電卓でも見ないが…。

 BASICにはSGNと呼ばれる符号取り出しの関数(正:1、0:0、負:-1)があるが、EL-5250にはない。そのため、ステップ関数(負:0、0以上:1)が実現しにくく、したがって、任意の不連続点のある関数が作りにくい。C言語の相当品としては、?:の三項演算子がある。
 もちろん、If P Goto Lを使えば代用できるが、プログラムは長くなるし、ラベルが必要となる。

 一部分のみに傾斜を持つ関数は、absを利用して、
  abs(X)−abs(X−1)
 などと書けるから、傾斜域を思いっ切り狭くして、
  abx(1E6X)−abs(1E6X−1)
 とすればステップに近くなる。しかし、実は1E6が微妙な値であったりする。

 双曲線正接関数のtanhは、ステップ関数のアナログ版(ロジスティック関数)と解釈できるから、これを狭くする手も考えられる。しかし、なぜか、EL-5250では定義域が-230〜230程度と、極度に狭い。どうせtanhの端の方は極度に-1/1に近いのだから、計算するまでもなく-1/1を返せばよいと思う(そのような関数電卓もある)のだが、エラーになってしまう。

▼エディタ、ファイル
 関数電卓と考えれば、エディタは良くできていて、実際、便利である。しかし、エディタとして見ると、せめてカット・アンド・ペーストは欲しい。
 ファイルは定義順に並んでゆくだけなので、数が多くなると不便。プログラム名があるのだから、アルファベット順に並んで、簡単な検索ができる、などの工夫が欲しかった。

● EL-5250のプログラム機能の感想

 EL-5250のプログラム機能は、EL-5120と同等で容量のみが増えた、と言ってよい。
 EL-5120のプログラム機能は、作者が断腸の思いで機能を削った跡が見える。そして、変数名の表示などは、それを補うための機能だろう。
 だから、10年後のEL-5250がEL-5120を単純に引き継いでしまったのは、失敗に近いと思う。このプログラム機能部分だけは、LISPマニアなどに再構成させるべきであった。

 それでも、関数電卓としてみると、今の水準で考えても、贅沢なほどのプログラム機能と思える。それほど、EL-5120は優れていたのだ。
 EL-5250をEL-5120の改良品として見ると、十分に成功していると思える。とにかく、デザインが良い。記憶容量が大きいのはありがたく、関数を駆使した配列シミュレーションのプログラミングは可能であろう。その例は、将来、機会があれば掲載したいと思う。
 とにもかくにも、EL-5120の路線が放棄されず、それどころか拡張されたのは、それだけでもうれしい。EL-5250も持っていてうれしい、間違いなく関数電卓の名作の一つに入ると思う。

(プログラマブル関数電卓 EL-5250 の巻、おしまい)