ANS85 

引数

引数には、関数の評価に使用する値を指定する。引数は、関数一意名で指定する。指定できる引数の型には、一意名、算術式、および定数がある。関数の定義では、必要な引数の数を指定する。引数の数は、0、1、またはそれ以上にできる。一部の関数では、指定できる引数の数を変更できる。関数一意名で引数を指定する順番により、関数の値に達する際に各値に与えられる解釈が決定される。場合により、引数は、特定の字類または特定の字類のサブセットを保持する必要がある。引数の型は次のとおり。

  1. 数値:算術式を指定する。関数の値を判別する際に、演算符号を含む算術式の値を使用する。
  2. 英字:字類が英字である基本データ項目、または英字だけを含む文字定数を指定する。関数の値を判別する際に、引数に関連付けられたサイズが使用される場合もある。
  3. 英数字:字類が英字または英数字である基本データ項目、あるいは文字定数を指定する。関数の値を判別する際に、引数に関連付けられたサイズが使用される場合もある。
  4. MF 各国文字:字類が各国文字であるデータ項目、または各国文字定数を指定する。関数の値を判別する際に、引数に関連付けられたサイズが使用される場合もある。
  5. 整数:結果が常に整数値になる算術式を指定する。関数の値を判別する際に、演算符号を含む算術式の値を使用する。

関数の規則により、関数の値を正確に決定するために、引数の許容値に制約が設けられる場合がある。関数を参照する際に、その参照に指定された引数の値が許容範囲内でない場合、その関数の返却値は不定となる。

関数の定義により引数を可変回数繰り返し指定できる場合は、表を参照できる。この場合、データ名およびその表を識別する修飾子を指定し、その直後に添え字を続ける。添え字が 1 つ以上ある場合は ALL という語を指定できる。

添え字に ALL を指定すると、その添え字の位置に関連付けられた表要素をすべて指定した場合と同じ効果が得られる。この暗黙の指定では、各要素が左から右に順に指定される。つまり、最初 (左端) の指定は、語 ALL で指定された各添え字が 1 で置換された一意名になり、次の指定もそれと同じ一意名になるが、語 ALL で指定された右端の添え字は 1 繰り上げられる。

この処理は、暗黙指定ごとに右端の ALL 添え字を 1 繰り上げ続け、右端の ALL 添え字がその値の範囲内で繰り上げられるまで続行される。追加の ALL 添え字がある場合は、右端の ALL 添え字のすぐ左の添え字が 1 繰り上げられ、右端の ALL 添え字は 1 にリセットされて、右端の ALL 添え字の値を変更する処理が繰り返される。右端の ALL 添え字の左にある ALL 添え字は、その値の範囲内で繰り上げられる。追加のすべての ALL 添え字についてこのプロセスが順に繰り返され、左端の ALL 添え字がその値の範囲内で 1 繰り上げられるまで続行される。

ALL 添え字が OCCURS DEPENDING ON 句に関連付けられている場合、値の範囲は OCCURS DEPENDING ON 句の右辺によって決まる。ALL 添え字の評価では 1 つ以上の引数を生成する必要がある。引数が生成されないと、関数一意名への参照の結果は不定となる。

 01 Test-Fields.
     10 OT-Elem                  PIC 9(02).
     10 Arr.
         15 Ind occurs 5 times        PIC 9(02).
     compute OT-Elem = function sum (IND(ALL)).

上記の例は、以下を指定した場合に等しい。

     compute OT-Elem = function sum (IND(1), IND(2), IND(3),
                                            IND(4), IND(5)).

ALL 添え字は、以下の例のように可変個数の要素を持つ表でも使用できる。

 01 Test-Group.
     03 OT-Elem               pic 9(15) binary.
     03 table-length          pic s9(9) binary.
     03 array.
         05 Ind pic 9(2) occurs 1 to 200 times depending on
                              table length
      ...
     move 100 to table-length.
     compute OT-Elem = function sum (Ind(ALL))

これらの文は、表の最初の 100 個の要素を合計する。関数の参照時に、table-length で指定した要素の数が、加える要素の数を決定する。