問題タブ [evaluator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
5 に答える
1673 参照

c# - ユーザーが C# アプリで財務数式を定義できるようにする方法

ユーザーがデータに基づいて値を計算する式を定義できるようにする必要があります。例えば

/ * + - 操作を許可し、ローカル変数を割り当てて IF ステートメントを実行する必要があります。

私は次の構造を持っているので、シナリオは複雑です..

  1. 顧客(数百)
  2. 構成 (顧客ごとに約 10)
  3. 項目 (顧客構成ごとに約 10,000)

そこで、3 レベルのループを実行します。各「構成」レベルで、DB トランザクションを開始してフォーラムをコンパイルします。各「アイテム」は同じトランザクション + コンパイルされた数式を使用します (構成ごとに約 20 の数式があり、各アイテムはそれらすべてを使用します)。

メモリ使用量が継続的に増加するため、コンパイラ サービスだけを使用することはできないため、これは事態をさらに複雑にします。渡す必要のある参照の一部をマーシャリングできないため、各「構成」ループ レベルごとに新しい AppDomain を使用できません。

助言がありますか?

--更新--これは私が行ったものです、ありがとう! http://www.codeproject.com/Articles/53611/Embedding-IronPython-in-aC-Application

0 投票する
3 に答える
1562 参照

haskell - Haskell の相互再帰評価器

更新:最終的な解決策を説明する回答を追加しました(ヒント: 単一のExprデータ型では不十分でした)。


私は小さな式言語のエバリュエーターを書いLetRecていますが、構造に行き詰まっています。

これは言語です:

そして、これはこれまでの評価者です:

これは、評価したいテスト関数です。


編集:

Travis の回答と Luke のコメントに基づいて、エラー モナドに MonadFix インスタンスを使用するようにコードを更新しました。前の例は問題なく動作します。ただし、次の例は正しく機能しません。

これを評価するとき、エバリュエーターはループし、何も起こりません。ここで少し厳しすぎるものを作ったと思いますが、それが何であるかはわかりません。MonadFix 法の 1 つに違反していますか?

0 投票する
2 に答える
2737 参照

java - Java 文字列および数式評価器

現在、式の評価には Jeks パーサーを使用しています。それを使用して文字列式を評価する方法がわかりません-たとえば:

IF( "テスト 1" = "テスト 2")

Java で文字列と数式を評価できるものはありますか? できれば無料またはオープンソース。

助けてくれてありがとう、

アンデス

0 投票する
1 に答える
426 参照

boost - 関数オブジェクト内の内部呼び出し (Boost::apply_visitor 固有)

現在、set< T > および set< set< T > > を生成するセット式評価器を作成しています。以下のコードは、式の結果を表示するためのものです。

私が経験している問題は、セットコードを使用してセットのセットを評価しようとしたときに発生しています。明らかにこれを使用しているのは良い習慣ですが、コンパイラーは呼び出しを構築するために使用している構文を好まないようです。

そのような2つの行があり、それらはトレースを生成します..

e:\documents\level 3\advanced software engineering\coursework\coursework\boost\variant\detail\apply_visitor_unary.hpp(76): エラー C2039: 'apply_visitor': 'std::set<_Kty>' のメンバーではありません1> with 1> [ 1> _Kty=std::string 1> ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.h(96) : 関数テンプレートのインスタンス化 'std への参照を参照してください::basic_string<_Elem,_Traits,_Ax> boost::apply_visitor::ExpressionTree::string_visitor,const std::set<_Kty>>(const Visitor &,Visitable &)' が 1> [ 1> _Elem でコンパイルされている=char, 1> _Traits=std::char_traits, 1> _Ax=std::allocator, 1> T=std::string, 1> _Kty=std::string, 1> Visitor=Context::ExpressionTree::string_visitor, 1> Visitable=const std::set 1> ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.h(90) : クラス テンプレート メンバ関数 'std::string Context::ExpressionTree::string_visitor::operator ()(std::set<_Kty>) const' 1> with 1> [ 1> T=std::string をコンパイル中、 1> _Kty=std::set 1> ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.cpp(337) : クラス テンプレートのインスタンス化への参照を参照してください 'Context::ExpressionTree::string_visitor ' コンパイル中 1> with 1> [ 1> T=std::string 1> ]ExpressionTree::string_visitor, 1> Visitable=const std::set 1> ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.h(90) : クラス テンプレート メンバー関数 'std のコンパイル中::string Context::ExpressionTree::string_visitor::operator ()(std::set<_Kty>) const' 1> with 1> [ 1> T=std::string, 1> _Kty=std::set 1 > [ 1> T=std::文字列 1> ]ExpressionTree::string_visitor, 1> Visitable=const std::set 1> ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.h(90) : クラス テンプレート メンバー関数 'std のコンパイル中::string Context::ExpressionTree::string_visitor::operator ()(std::set<_Kty>) const' 1> with 1> [ 1> T=std::string, 1> _Kty=std::set 1 > [ 1> T=std::文字列 1> ]] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.h(90) : クラス テンプレート メンバー関数のコンパイル中 'std::string Context::ExpressionTree::string_visitor::operator ()( std::set<_Kty>) const' 1> with 1> [ 1> T=std::string, 1> _Kty=std::set 1> ] 1> e:\documents\level 3\高度なソフトウェア工学\ coursework\coursework\context.cpp(337) : 1> [ 1> T=std::string 1> ] でコンパイルされているクラス テンプレートのインスタンス化 'Context::ExpressionTree::string_visitor' への参照を参照してください] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.h(90) : クラス テンプレート メンバー関数のコンパイル中 'std::string Context::ExpressionTree::string_visitor::operator ()( std::set<_Kty>) const' 1> with 1> [ 1> T=std::string, 1> _Kty=std::set 1> ] 1> e:\documents\level 3\高度なソフトウェア工学\ coursework\coursework\context.cpp(337) : 1> [ 1> T=std::string 1> ] でコンパイルされているクラス テンプレートのインスタンス化 'Context::ExpressionTree::string_visitor' への参照を参照してください文字列 Context::ExpressionTree::string_visitor::operator ()(std::set<_Kty>) const' 1> with 1> [ 1> T=std::string, 1> _Kty=std::set 1> ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.cpp(337) : クラス テンプレートのインスタンス化への参照を参照してください 'Context::ExpressionTree::string_visitor' がコンパイルされています 1> [ 1> T=標準::文字列 1> ]文字列 Context::ExpressionTree::string_visitor::operator ()(std::set<_Kty>) const' 1> with 1> [ 1> T=std::string, 1> _Kty=std::set 1> ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.cpp(337) : クラス テンプレートのインスタンス化への参照を参照してください 'Context::ExpressionTree::string_visitor' がコンパイルされています 1> [ 1> T=標準::文字列 1> ]1> [ 1> T=std::string 1> ] でコンパイルされているクラス テンプレートのインスタンス化 'Context::ExpressionTree::string_visitor' への参照を参照してください。1> [ 1> T=std::string 1> ] でコンパイルされているクラス テンプレートのインスタンス化 'Context::ExpressionTree::string_visitor' への参照を参照してください。

その種の呼び出しを表現する方法を知っている人はいますか?

乾杯、アレックス

0 投票する
2 に答える
287 参照

performance - 最高のパフォーマンス評価者 f#

いくつかの関数の単純な評価器を実装しました。f# の世界に入ったばかりなので、より高速なエバリュエーターが存在するか (存在する場合は実装方法) を尋ねられます。(variableName, (condition + newVariableName)) を含むデータ構造を取得する必要があります。これら 2 つのフィールドは文字列です。以下は、私のバージョンのエバリュエーターの一部です。

編集: このエバリュエーターは、ブール条件を検証するために使用されます。このバージョンでは、ディクショナリが 1 つしかなく、パフォーマンスが向上していますが、次のような状況をモデル化するにはどうすればよいですか。

  1. var1 == "foo1" && var1=="foo2" ---> 満足: false
  2. var2>=0 && var2>0 ---> 満足: true
  3. (var3 == "foo2" && var3 != null) || var3 == "foo1" --> 満足できる: true
0 投票する
3 に答える
1340 参照

functional-programming - SECDマシンでは、「ラップ」はどのように機能しますか?

ウィキペディアの説明に基づいて、C#でSECDマシンのシミュレーターを作成しています。基本的な操作は完了しましたが、命令の実装方法がわかりません。rap

ウィキペディアでは、次のように述べていrapます。

rapはapのように機能しますが、ダミー環境の発生を現在の環境に置き換えるだけで、再帰関数が可能になります。

そしてapそれは言う:

apは、スタックからクロージャとパラメータ値のリストをポップします。クロージャーは、その環境を現在の環境としてインストールし、その前にパラメーターリストをプッシュし、スタックをクリアし、Cをクロージャーの関数ポインターに設定することによってパラメーターに適用されます。S、Eの前の値、およびCの次の値がダンプに保存されます。

これが私の実装ですap

ListこれがLispスタイルの「cons」セルの実装であることに注意してください。

私を混乱させるのは、正確にどのようにrap違うのapですか?たとえば、環境レジスタ(E)は正確にどうなりますか?ウィキペディアの定義が少し曖昧で、それをうまく説明するものを他に見つけることができませんでした。

0 投票する
2 に答える
214 参照

lua - Luaインタープリターをエバリュエーターモードで実行できますか?

スクリプト通訳者の多くは、評価者を好むirbnode、評価者として機能します。このコードを実行すると、

値自体を評価して出力し、エラーは発生しません。

インストールluaすると、エバリュエーターではなくエグゼキューターとして機能しました。だから、置く10とエラーになります。

Luaインタープリターを評価者として機能させることはできますか?

0 投票する
1 に答える
391 参照

c++ - g++を使用して特定のコードをコンパイルするプログラムを作成する

g ++を使用して記述されたコードをコンパイルし、例を使用して正常に動作するかどうかをテストするプログラムを作成する方法を理解しようとしています。プログラムには、コード(ソリューション)を入力するテキストボックスがあります。2つの数値の合計を計算するプログラムを作成することが演習だったとしましょう。

そのプログラムがしなければならないことは、与えられたコードを含むexample.cppファイルを作成し(私はその部分に精通しています)、g++を使用してexample.cppをコンパイルします。プログラムをコンパイルするときは、コンパイルされたプログラムに例を入力して、結果が正しいかどうかをテストする必要があります。たとえば、テスト番号は4と5で、結果は9である必要があります(これらのテスト番号は、.txtファイルなどに保存できます)。

このプログラムでexample.cppをコンパイルしますが、それを実行してテストする方法。

何か案は?ありがとう!:)

編集:私はそれを実行し、それにテスト番号を入力することができます、残っているのは出力が正しいかどうかをテストすることだけです。

0 投票する
1 に答える
909 参照

winforms - ログのチャンクを受信するための Log4net SmtpAppender 構成

すべてをログ ファイルに保存し、メールごとに 512 メッセージを含むメールを受信したいと考えています。

RollingFileAppender は正常に動作します。しかし、メールでは、メールで1通のメッセージを受け取ることもあれば、4通のメッセージを受け取ることもあります(同じメッセージではありません)。

私もMemoryAppenderを試しました。そこには、キューに1〜2個のメッセージもあり、それ以上のものはありません。

「ロッシー」SmtpAppender を試してみましたが、結果は同じです。何を変更すればよいですか?

私の構成はここにあります

0 投票する
2 に答える
6396 参照

session - ラバ3.2。フロー内の空のセッション変数を評価する方法は?

この選択でセッション変数がnullまたは空であるかどうかを確認するにはどうすればよいですか?それは私にとっては機能しません。

また、!=''と!=nullを試しました