%LOOKUPxx (配列要素の検索)

%LOOKUP(arg : array {: startindex {: numelems}})
%LOOKUPLT(arg : array {: startindex {: numelems}})
%LOOKUPGE(arg : array {: startindex {: numelems}})
%LOOKUPGT(arg : array {: startindex {: numelems}})
%LOOKUPLE(arg : array {: startindex {: numelems}})

次の関数は、以下に示すような点で引数 と一致する配列 内の項目の配列指標を戻します。

%LOOKUP
正確に一致するもの。
%LOOKUPLT
引数 に最も近いが、引数 よりも小さいもの。
%LOOKUPLE
正確に一致しているか、または引数 に最も近いが引数 よりは小さい値。
%LOOKUPGT
引数 に最も近いが、引数 より大きいもの。
%LOOKUPGE
正確に一致しているか、または引数 に最も近いが引数 より大きい値。

指定された条件に一致する値がない場合は、ゼロが戻されます。

検索は開始指標 から始まり、要素の数 要素まで続行されます。デフォルトでは、配列全体が検索されます。

最初の 2 つのパラメーターはどんなタイプであっても構いませんが、同じタイプでなければなりません。 これらの長さまたは小数点以下の桁数は、同じである必要はありません。3 番目と 4 番目のパラメーターは、小数点以下の桁数がゼロの非浮動数値である必要があります。

%LOOKUPLT、%LOOKUPLE、%LOOKUPGT、および %LOOKUPGE の場合、配列がキーワード ASCEND または DESCEND を使用して定義されている必要があります。引数 または配列 が ALTSEQ(*NONE) を指定して定義されている場合を除 き、ALTSEQ テーブルが使用されます。

組み込み関数 %FOUND と %EQUAL は %LOOKUP 命令に続けて設定されません。

%LOOKUPxx 組み込み関数は、順序配列 (ASCEND または DESCEND キーワードが指定された配列) を検索するために二分探索を使用します。

注:
LOOKUP 命令コードとは異なり、%LOOKUP は配列にのみ適用されます。テーブル内の値を検索するには %TLOOKUP 組み込み関数を使用します。

詳細については、配列命令または組み込み関数を参照してください。

図 208. %LOOKUPxx の例
 *..1....+....2....+....3....+....4....+....5....+....6....+....7...+....
  /FREE
   arr(1) = 'Cornwall';
   arr(2) = 'Kingston';
   arr(3) = 'London';
   arr(4) = 'Paris';
   arr(5) = 'Scarborough';
   arr(6) = 'York';

   n = %LOOKUP('Paris':arr);
   // n = 4

   n = %LOOKUP('Thunder Bay':arr);
   // n = 0 (not found)

   n = %LOOKUP('Kingston':arr:3);
   // n = 0 (not found after start index)

   n = %LOOKUPLE('Paris':arr);
   // n = 4

   n = %LOOKUPLE('Milton':arr);
   // n = 3

   n = %LOOKUPGT('Sudbury':arr);
   // n = 6

   n = %LOOKUPGT('Yorks':arr:2:4);
   // n = 0 (not found between elements 2 and 5)
 /END-FREE