%MAXはいくつかの候補のうちの最大値を選択する組込み関数である。
RPGだけでなく他の言語でも最大値を求める関数はサンプル・ソースなどに
数多く取り上げられているが何故かC言語のライブラリー関数にも
用意されていない。
SQLでも MAX関数が用意されているほどポピュラーな関数である。
[TESTMAX : %MAXサンプル・ソース]
ソースはこちらから
0001.00 H DFTNAME(TESTMAX) DATEDIT(*YMD/) 0002.00 F******** %MAX のテスト ******************************************** 0003.00 F* 0004.00 F***************************************************************** 0005.00 D SU1 S 4S 0 INZ(30) 0006.00 D SU2 S 4S 0 INZ(78) 0007.00 D SU3 S 4S 0 INZ(45) 0008.00 D MAX S 4S 0 0009.00 D MAXC S 4A 0010.00 D ANS S 1A 0011.00 0012.00 /FREE 0013.00 MAX = %MAX(SU1: SU2: SU3); 0014.00 MAXC = %EDITC(MAX:'Z'); 0015.00 DSPLY ('MAX = ' + MAXC) '' ANS; 0016.00 /END-FREE 0017.00 C SETON LR
RPGでもいつかは提供されるものと思っていたがようやくOS Ver7.5で
%MAXという組込み関数が標準装備されるようになった。
遅きに失したくらいである。
IBMもこのことにも早くから気づいたいたようでOS Ver7.2からPTFとして
提供されるよになったが Ver7.2~ 7.4でも標準としてILE-RPGの
中には組み込まれずに専らPTFとして提供のみであって
ようやくVer7.5で使えるようになった。
ただしVer7.2~7.4のユーザーではPTFは適用されていても
SEUで%MAXを使うとエラーとして扱われてしまう。
もちろん Ver7.2~7.4のRPG解説書には %MAX は紹介されてない。
しかしコンパイルしてみると正しく%MAXも組み込まれて
コンパイルすることができる。
_