DC(1) — NEWS-OS Programmer’s Manual
名称
dc − 卓上計算機プログラム
形式
dc [ file ]
解説
dc は、任意精度の算術演算パッケージです。通常は10進整数に対して作動しますが、 入力基数、出力基数、および小数部の桁数を指定することができます。 dc の全体構造は、スタック(逆ポーランド)計算機です。 引数が与えられた場合には、入力は指定されたファイルからその ファイルの終りまで読み取られ、その次に標準入力から取り込まれます。 次の構文が認識されます。
数 数値がスタックに入れられます。 数は 0 から 9 までの数字が連続した文字列です。 負の数を入力するには、その前にアンダースコア( _ )を付けます。 小数点数も使用できます。
+ − / ∗ % ^
スタック上の先頭の2つの値が、加算(+)、減算(−)、乗算(∗)、除算(/)、 剰余計算(%)、またはべき乗(^)の対象になります。これら2つの値はスタックから 取り出され、その代わりに結果がスタックに入れられます。指数の小数部は 無視されます。
sx スタックの先頭の値を取り出し、 x いう名前のレジスタ(ここで、 x は任意のキャラクタ)に入れます。 s を大文字にすると、 x はスタックとして扱われ、値はそのスタックに入れられます。
lx レジスタ x の値がスタックに入れられます。レジスタ x は変更されません。すべてのレジスタは、ゼロの値で開始します。 l を大文字にすると、レジスタ x はスタックとして扱われ、その先頭の値がメインスタックに入れられます。
d スタックの先頭の値をコピーします。
p スタックの先頭の値を表示します。先頭の値は変更されません。 P は、スタックの先頭の値をASCII文字列と解釈し、 それをスタックから削除して表示します。
f スタックおよびレジスタ内の値をすべて表示します。
q プログラムを終了させます。文字列を実行している場合には、 再帰レベルを 2レベル取り出します。 q を大文字にすると、スタックの先頭の値が取り出され、文字列実行レベルが、 その値の分だけ取り出されます。
x スタックの先頭要素を文字列として扱い、 dc コマンドの文字列として実行します。
X スタックの先頭の数を、そのスケールファクタで置き換えます。
[...] 大かっこ [ ] で囲まれたASCII文字列をスタックの先頭に入れます。
<x >x =x
スタックの先頭の要素が 2つ取り出されて比較されます。 指定された関係が成立していれば、レジスタ x が実行されます。
v スタックの先頭の要素を、その平方根で置き換えます。 引数に小数点がある場合には、平方根でそれが考慮されますが、 そうでない場合には、スケールファクタは無視されます。
! 行の残りの部分を NEWS−OS コマンドとして解釈します。
c スタック内の値がすべて取り出されます。
i スタックの先頭の値が取り出され、それ以後の入力の基数として使用されます。 I は、入力の基数をスタックの先頭に入れます。
o スタックの先頭の値が取り出され、それ以後の出力の基数として使用されます。
O 出力基数をスタックの先頭に入れます。
k スタックの先頭の値が取り出され、その値が負ではないスケールファクタとして 使用されます。出力には適切な位取りが表示され、また、乗算、除算、 べき乗の際には、その位取りが保持されます。スケールファクタ、入力基数、 および出力基数の相互作用は、これらがすべて 1度に変更された場合には 筋のとおったものになります。
z スタックレベルがスタックに入れられます。
Z スタックの先頭の数を、その長さで置き換えます。
? 1行の入力が入力ソース(通常は端末装置)から取り込まれ、実行されます。
; : bc によって配列演算に使用されます。
次の例は、n! の最初の 10 個の値を表示するものです。
[la1+dsa∗pla10>y]sy
0sa1
lyx
関連事項
bc(1): これは、 dc のプリプロセッサであり、プログラムのためのインフィックス表記法、 並びに関数と理にかなった制御構造を実現する Cライクな構文規則を提供しています。
診断
‘x is unimplemented’ ここで、 x は 8進数である。
‘stack empty’ スタック上には要求されたことを遂行するのに必要な数の要素がない。
‘Out of space’ フリーリストが使い果たされた(桁数が多すぎる)。
‘Out of headers’ 数が多すぎる。
‘Out of pushdown’ スタック上の項目が多すぎる。
‘Nesting Depth’ ネストされた実行のレベルが深すぎる。
NEWS-OSRelease 4.1C