4

TEvaluatorDelphi 7の JCL クラスに含まれている定義済み関数 (ABS 関数など) を知っている人はいますか?

4

2 に答える 2

4

付属の標準機能はありませんMath.pas。デフォルトの評価パーサーに実装されているのは、演算子, or, xor, and, not, mod, +, -, /, *, <, >, <=, >=, =,divおよびだけです。(ソースの簡単なチェックで見つけたのと同じくらい多く、@ David のコメントに基づいて見逃したものもいくつかあります。)cmpborbxorbandbnotshlshr

関数(Delphi RTL の一部である関数を含む)をエバリュエータに簡単に追加できます。JCL ユニットの 1 つから機能を追加するデモにも示されています。

JCL\examples\common\exprevalデフォルトでフォルダー内にある JCL エバリュエーターの例 (ExprEvalExample.dpr) は、パラメーターとしてaTComboBox.ItemsInit関数に渡します。これは、このコード (同じルーチン内の関数に与えられます) によって からの関数が取り込まれます。ExprEvalExampleLogic.pasFuncListTEasyEvaluatorJclMath.pas

  with FuncList do
  begin
    Add('LogBase10');
    Add('LogBase2');
    Add('LogBaseN');
    Add('ArcCos');
    Add('ArcCot');
    Add('ArcCsc');
    Add('ArcSec');
    Add('ArcSin');
    Add('ArcTan');
    Add('ArcTan2');
    Add('Cos');
    Add('Cot');
    Add('Coversine');
    Add('Csc');
    Add('Exsecans');
    Add('Haversine');
    Add('Sec');
    Add('Sin');
    Add('Tan');
    Add('Versine');
    Add('ArcCosH');
    Add('ArcCotH');
    Add('ArcCscH');
    Add('ArcSecH');
    Add('ArcSinH');
    Add('ArcTanH');
    Add('CosH');
    Add('CotH');
    Add('CscH');
    Add('SecH');
    Add('SinH');
    Add('TanH');
  end;

これらは、デモ アプリでサポートされている機能です。同様の方法で独自のものを追加できます。

于 2012-11-27T20:36:33.677 に答える
3

定義済み関数は含まれていません。標準の算術演算子があります: +、-、*、div、および mod。そして、すべての標準的な論理演算子とビット演算子があります。しかし、abs、sin、exp、log などのようなものはありません。それらを自分で配置する必要があります。関数を追加するのは非常に簡単で、評価者がサポートするものを正確に選択できるようにするのは良い設計だと思います。

于 2012-11-27T20:10:52.480 に答える