文字列
\*(dc は、数と同じように文字列を操作できます。
文字列に対してできる唯一のことは、それを表示し、マクロとして
実行することです。
マクロとは、\*(dc コマンドとして実行される文字列の内容のことです。
すべてのレジスタとスタックは文字列を保存できます。
そして、\*(dc はいつも、与えられたデータが文字列か数字かを
知っています。
算術操作のようないくつかのコマンドは、数を必要としており、
文字列が与えられた場合はエラーが表示されます。
他のコマンドは、数字か文字列を受け入れることができます。
例えば、
p
コマンドは、両方を受け付けることができ、データをその型に応じて
表示します。
[ characters ]
-
(左右の釣合のとれた、
[
と
]
で囲まれた
)
characters
という文字列を作り、それをスタックに積みます。
例えば、
[foo]P
は文字列
foo
を表示します (が、改行文字は表示しません)。
-
a
-
スタック先頭の値を取り出し、それが数字なら、その低位バイトを
文字列に変換し、スタックに積みます。文字列なら、その最初の文字が
スタックに積み戻されます。
-
x
-
スタックから値を取り出し、マクロとして実行します。
普通、これは文字列です。数の場合は、単純にその値がスタックに
積み戻されます。
例えば、
[1p]x
は、マクロ
1p
を実行します。
1p
は、
1
をスタックに積み、別の行に
1
を表示します。
マクロは、しばしばレジスタにも保存されます。
[1p]sa
は、
1
を表示するためのマクロを
レジスタ
a
に保存します。
lax
でこのマクロは実行できます。
-
> r
-
スタックから 2 つの値を取り出し、それらを数と仮定して比較し、
もともとのスタックの先頭が大きい場合、レジスタ
r
の内容を実行します。
したがって、
1 2>a
は、レジスタ
a
の内容を実行しますが、
2 1>a
では実行しません。
-
!> r
-
似ていますが、もともとのスタックの先頭が 2 番目の値よりも大きくない場合
(2 番目の値以下である場合)、マクロを起動します。
-
< r
-
似ていますが、もともとのスタックの先頭が小さい場合にマクロを実行します。
-
!< r
-
似ていますが、もともとのスタックの先頭が 2 番目の値よりも小さくない場合
(2 番目の値以上である場合)、マクロを起動します。
-
= r
-
似ていますが、2 つの取り出された値が等しい場合にマクロが実行されます。
-
!= r
-
似ていますが、2 つの取り出された値が等しくない場合にマクロが実行されます。
これは、2 つの文字列の等価性を比較するためにも使うことができます。
-
?
-
端末から行を読み込み、実行します。
このコマンドは、ユーザからの入力を要求するためのマクロで使えます。
-
q
-
マクロを終了し、それを呼び出したマクロからも終了します。
一番上のレベルか、一番上のレベルから直接呼ばれたマクロから呼ばれると、
q
コマンドは \*(dc を終了します。
-
Q
-
スタックから値を取り出し、それを終了すべきマクロレベル数として、
その数のマクロを終了します。
したがって、
3Q
は、3 つのレベルを終了します。
Q
コマンドでは、\*(dc を終了することはありません。