REDUCE

REDUCE

dynamic-clause
array-clause

[GIVING operand5]

このドキュメントでは、次のトピックについて説明します。

構文図で使用されている記号については、「構文記号」を参照してください。

関連ステートメント:EXPAND | RESIZE

関連機能グループ:ダイナミック変数または X-array のメモリ管理制御


関数

REDUCE ステートメントは、次を縮小するために使用します。

  • ダイナミック変数(dynamic-clause)の割り当てられた長さ、または

  • X-array(array-clause)のオカレンス数

詳細については、『プログラミングガイド』の次のセクションを参照してください。

構文説明

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1   S A     A U         B             × ×
operand2 C S               I                 × ×
operand3     A G   A U N P I F B D T L C G O ×
operand4 C S           N P I                 × ×
operand5   S               I4                 ×

構文要素の説明:

構文要素 説明
dynamic-clause
Dynamic 節:

REDUCE DYNAMIC VARIABLE ステートメントは、ダイナミック変数(operand1)の割り当てられた長さを、指定した長さ(operand2)に縮小します。

詳細については、後述の「Dynamic 節」を参照してください。

operand1
ダイナミック変数:

operand1 は、長さが縮小されるダイナミック変数です。

operand2
ダイナミック変数のターゲット長:

operand2 は、縮小後のダイナミック変数の長さを指定するために使用します。

値として、負ではない整数の定数または整数値 4(I4)タイプの変数を指定する必要があります。

array-clause
Array 節:

REDUCE ARRAY ステートメントは、X-array(operand3)のオカレンス数を、(dim[,dim[,dim]]) で指定した上下限に縮小します。

詳細については、後述の「Array 節」を参照してください。

operand3
X-array:

operand3 は X-array です。X-array のオカレンスを削減できます。

配列のインデックス表記はオプションです。各次元でインデックス表記として使用できるのは、全範囲を示す表記 * のみです。

dim operand4
次元:

X-array 縮小の上下限表記(operand4 またはアスタリスク)は、ここで指定します。現在の上下限の値を使用する必要がある場合は、operand4 の代わりにアスタリスク(*)を指定する必要があります。

詳細については、後述の「次元」を参照してください。

GIVING operand5
GIVING 節:

GIVING 節を指定しない場合は、エラー発生時に Natural ランタイムエラー処理がトリガされます。

GIVING 節を指定した場合は、operand5 に、エラー発生時は Natural メッセージ番号、成功時はゼロが含まれます。

Dynamic 節

[SIZE OF] DYNAMIC [VARIABLE] operand1 TO operand2

REDUCE DYNAMIC VARIABLE ステートメントは、ダイナミック変数(operand1)の割り当てられた長さを、指定した長さ(operand2)に縮小します。指定した長さを超える分のダイナミック変数の割り当て済みメモリは、ステートメントの実行時に即座に解放されます。

ダイナミック変数の現在割り当てられている長さ(*LENGTH)が指定した長さより長い場合、*LENGTH は指定した長さに設定され、変数の内容が切り捨てられます(修正は行われません)。指定した長さがダイナミック変数の現在割り当てられている長さより長い場合、ステートメントは無視されます。

Array 節

[OCCURRENCES OF] ARRAY operand3 TO

0
(dim[,dim[,dim]])

REDUCE TO 0(ゼロ)を指定した場合、X-array の全オカレンスが解放されます。つまり、配列全体が削減されます。

REDUCE ARRAY ステートメントは、X-arrayoperand3)のオカレンス数を、 TO (dim[,dim[,dim]]) で指定した上下限に縮小します。

REDUCE ステートメントで使用される上限または下限は、配列に定義された対応する上限または下限と正確に同じである必要があります。

例:

DEFINE DATA LOCAL
1 #a(I4/1:*)
1 #g(1:*)
  2 #ga(I4/1:*)

1 #i(i4)
END-DEFINE
...


*/ reducing #a (1:10)

REDUCE ARRAY #a TO (1:10)       /* #a is reduced 
REDUCE ARRAY #a TO (*:10)       /* to 10 occurrences.


*/ reducing #ga (1:10,1:20)

REDUCE ARRAY #g TO (1:10)       /* 1st dimension is set to (1:10)
REDUCE ARRAY #ga TO (*:*,1:20)  /* 1st dimension is dependent and 
                                /* therefore kept with (*:*)
                                /* 2nd dimension is set to (1:20)
 
REDUCE ARRAY #a TO (5:10)       /* This is rejected because the lower index
                                /* must be 1 or *
REDUCE ARRAY #a TO (#i:10)      /* This is rejected because the lower index
                                /* must be 1 or *

REDUCE ARRAY #ga TO (1:10,1:20) /* (1:10) for the 1st dimension is rejected
                                /* because the dimension is dependent and 
                                /* must be specified with (*:*).

詳細については、次を参照してください。

Dimension

Array 節で指定する各次元(dim)は、次の構文を使用して定義します。

*

*
operand4

:

*
operand4

X-array 縮小の上下限表記(operand4 またはアスタリスク)は、ここで指定します。現在の上下限の値を使用する必要がある場合は、operand4 の代わりにアスタリスク(*)を指定できます。*:* の代わりに単一のアスタリスクを指定できます。

次元数(dim)は、X-array(1、2、または 3)と正確に一致している必要があります。

REDUCE ステートメントを使用するときは、オカレンス数を減らすことだけが可能です。要求した数が現在割り当てられているオカレンス数よりも大きい場合は無視されます。