2016年8月10日水曜日

マクロ言語入門11:演算評価 【%EVAL、%SYSEVALF】



%EVAL関数」と「%SYSEVALF関数」を紹介していきます。





以下のプログラムと実行ログをご覧ください。

%put  10 + 200 ;

ログ
10 + 200

 「10 + 200」 を計算して 「210」 とログに出力されることを期待しましたが、実際は文字がそのまま返されています。
このような場合、%EVAL関数や%SYSEVALF関数が使えます。




構文

  %EVAL(   演算内容   )

  • 中に書かれた演算を実行する。ただし整数のみ。
  • 割り算等で結果が小数になる場合は、小数部分が破棄されてしまう。
  • 「2 = 2.0」や「a < b」のように値に小数や文字を含む場合、文字値として評価を行います。
    (つまり「2」と「2.0」は異なる文字値として評価される)





  %SYSEVALF(   演算内容   )

  • 中に書かれた演算を実行する。浮動小数点の演算が可能。
  • 浮動小数点の演算後、BEST32形式に変換された値が返される。







%EVAL関数の例
%put %eval( 10 + 200 ) ;
%put %eval( 1 < 2 ) ;
%put %eval( 2 = 2.0 ) ;

ログ
210
1
0

補足 ・・・ 「1 < 2」 のような論理式の場合、論理式が真(true) の場合 「1」が返され、偽(false) の場合 「0」が返されます。



%SYSEVALF関数の例
%put %sysevalf( 0.1 + 0.2 ) ;
%put %sysevalf( 2 = 2.0 ) ;

ログ
0.3
1





記事一覧

1. マクロ変数とは
2. マクロの登録と実行
3. 定位置パラメータ
4. キーワードパラメータ
5. クォート処理
6. クォート処理2
7. ループ処理
8. 条件分岐処理
9. ドット
10. &&
11. 演算評価
12. 補足



0 件のコメント:

コメントを投稿