せっかく時間をかけて理解したと思えるところまで来た.
書いておけば自分の復習にもなる.
● ALPHA レジスター内の文字の検索
ALPHA レジスターの内容を検索して特定の文字を探すことができる.
これには $\mathrm{POSA} \, (\text{POSition in Alpha})$ 機能を使用する.
ALPHA レジスターに
\begin{equation*}
\newcommand{\Ar}[1]{\mathrm{Ar}(#1)}
\newcommand{\ar}{\mathrm{ar}}
\newcommand{\arop}{\Opp{\mathrm{ar}}}
\newcommand{\Cocone}[2]{\mathrm{Cocone}(#1,#2)}
\newcommand{\Colim}{\mathrm{colim}}
\newcommand{\CommaCat}[2]{(#1 \downarrow #2)}
\newcommand{\Cone}[2]{\mathrm{Cone}(#1,#2)}
\newcommand{\Func}[2]{\mathrm{Func}(#1,#2)}
\newcommand{\Hom}{\mathrm{Hom}}
\newcommand{\Id}[1]{\mathrm{id}_{#1}}
\newcommand{\Mb}[1]{\mathbf{#1}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\newcommand{\Ms}[1]{\mathscr{#1}}
\newcommand{\Mt}[1]{\mathtt{#1}}
\newcommand{\Nat}[2]{\mathrm{Nat}(#1,#2)}
\newcommand{\Ob}[1]{\mathrm{Ob}(#1)}
\newcommand{\Opp}[1]{{#1}^{\mathrm{op}}}
\newcommand{\Pos}{\mathbf{Pos}}
\newcommand{\q}{\hspace{1em}}
\newcommand{\qq}{\hspace{0.5em}}
\newcommand{\Rest}[2]{{#1}|{#2}}
\newcommand{\Sub}{\mathrm{Sub}}
\newcommand{\Src}{d^{0,\mathrm{op}}}
\newcommand{\Tgt}{d^{1,\mathrm{op}}}
\Mt{I~have~been~away~from~Japan~for~a~year.}
\end{equation*} という文字列が入っているとする.
ALPHA レジスター内の文字 '$\Mt{a}$' (文字コードは 97, 16 進数では 0x61) を検索するには, 次の操作を行う.
(1) $\Mr{X}$ レジスターに文字コード 97 を入力する.
\begin{align*}
\Mt{Y:} & \qq - \\
\Mt{X:} & \qq\Mt{97}
\end{align*} (2) この状態で
\begin{equation*}
\Mr{CATALOG} \qq \Mr{FCN} \qq \Mr{POSA}
\end{equation*} を実行する. 一致する文字があると, その文字の ALPHA レジスター内における位置番号 (左端の先頭文字の位置番号を 0 とする) が $\Mr{X}$ レジスターに入る.
\begin{align*}
\Mt{Y:} & \qq - \\
\Mt{X:} & \qq\Mt{3}
\end{align*} $\Mr{X}$ レジスター内の 3 は, ALPHA レジスター内の文字列 "$\Mt{I~have~been~away~from~Japan~for~a~year.}$" に現れる最初の '$\Mt{a}$' の位置番号が 3 であることを意味する.
● ALPHA レジスター内の文字列の長さ
ALPHA レジスターに保存されている文字列の長さを求めるには $\Mr{ALEN} \, (\text{Alpha LENgth})$ 機能を用いる.
上記と同じ文字列 "$\Mt{I~have~been~away~from~Japan~for~a~year.}$" が ALPHA レジスターに入っている場合,
\begin{equation*}
\Mr{CATALOG} \qq \Mr{FCN} \qq \Mr{ALEN}
\end{equation*} を実行するとディスプレイにこの文字列の長さ 39 が表示される.
\begin{align*}
\Mt{Y:} & \qq - \\
\Mt{X:} & \qq\Mt{39}
\end{align*}
● ALPHA レジスターのシフト
$\Mr{ASHF}\, (\text{Alpha SHiFt})$ 機能を使用すると, 現在の ALPHA レジスターの内容が左に 6 文字シフトされる. つまり, 先頭から 6 文字が削除される.
$\Mr{ASHF}$ 機能を使用する例として, $\Mr{ASTO}$ 機能を使用して, レジスターの $01$ 番に ALPHA レジスターの内容をコピーする場合を考える.
現在の ALPHA レジスターに文字列
\begin{equation*}
"\Mt{My~favorite~recreation~is~traveling.}"
\end{equation*} が入っているとする. ここで
\begin{equation*}
\Mr{ASTO} \qq 01
\end{equation*} を実行すると, レジスター $01$ 番 $\Mr{R}_{01}$ に ALPHA レジスターの内容の先頭から 6 文字がコピーされる. レジスター $\Mr{R}_{01}$ の内容を
\begin{equation*}
\Mr{RCL} \qq 01
\end{equation*} によって確認すると,
\begin{align*}
\Mt{Y:} & \qq - \\
\Mt{X:} & \qq\Mt{"My~fav"}
\end{align*} となり, 確かにレジスター $\Mr{R}_{01}$ に ALPHA レジスターの先頭から 6 文字がコピーされている.
ALPHA レジスターの先頭から 6 文字がレジスター $\Mr{R}_{01}$ にコピーされたことによって, 元のデータが不要になり削除したい場合に $\Mr{ASHF}$ 機能を利用する.
\begin{equation*}
\Mr{CATALOG} \qq \Mr{FCN} \qq \Mr{ASHF}
\end{equation*} こうすると, ALPHA レジスターの内容は左へ 6 文字分シフトされて
\begin{equation*}
"\Mt{orite~recreation~is~traveling.}"
\end{equation*} になる.
● ALPHA レジスターの回転
$\Mr{AROT}\, (\text{Alpha ROTation})$ 機能を使用すると, 現在の ALPHA レジスターの内容を $\Mr{X}$ レジスターに入っている数値の分だけ回転させることができる. $\Mr{X}$ レジスターの数値が正の場合は左に回転し, 負の場合は右に回転する. 一般に数値の小数点以下は捨てられて整数部が使用される.
例えば ALPHA レジスターに
\begin{equation*}
\Mt{ABCDEFGHIJKLMNOP}
\end{equation*} という文字列が入っているとして,
\begin{equation*}
1 \qq \Mr{CATALOG} \qq \Mr{FCN} \qq \Mr{AROT}
\end{equation*} を実行する.
この結果, ALPHA レジスターの内容が左に 1 文字回転して
\begin{equation*}
\Mt{BCDEFGHIJKLMNOPA}
\end{equation*} となる. これに続けて
(1) $-5 \qq \Mr{CATALOG} \qq \Mr{FCN} \qq \Mr{AROT}$
(2) $4.8 \qq \Mr{CATALOG} \qq \Mr{FCN} \qq \Mr{AROT}$
を実行する.
(1) を実行した後には ALPHA レジスターの内容は右に 5 文字回転して
\begin{equation*}
\Mt{MNOPABCDEFGHIJKL}
\end{equation*} となる.
それから (2) を実行すると ALPHA レジスターの内容は左に 4 文字回転して
\begin{equation*}
\Mt{ABCDEFGHIJKLMNOP}
\end{equation*} となる.
HP-42S のマニュアルの先の方を読むと, ここで挙げた ALPHA レジスター内の英数字データの操作機能が図形描画などにも使用されている. また理解するのに時間がかかりそうだが面白そうだ.
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
-
no image