次のような式を単純化できる最高の(使用の単純さとパフォーマンスの点で)C ++ / C ++ 11ライブラリは何ですか?
(a < 0 && b > 0) || (a < 0 && c > 0) || (a < 0 && c > 1)
に(例)
a < 0 && (b > 0 || c > 0)
1つのことを説明することは非常に重要だと思います(この質問は誤解されていると思うので)。
私はC/C++式を単純化したくありません-私は知っています、コンパイラーはそれを作ることができます。
グラフ処理ツールを作っています。グラフの端には、頂点に関するいくつかの条件があります(頂点が、、であるとしましょう。a
これらb
のc
条件はa<b
、b>0
などのようなものです。これらの条件は「文字列」として表されないことに注意してください。これらは任意の関数またはライブラリ呼び出し)。処理中、式をまとめて収集し、さらにグラフを処理する前に、式を単純化したいと思います。
条件と式は実行時に作成されます。
そのライブラリに次のような式を入力できるようにしたいと思います。
[...]
a = new Variable();
b = new Variable();
expr1 = lib.addExpr(a,0, lib.LESS);
expr2 = lib.addExpr(b,0, lib.MORE);
expr3 = lib.addExpr(expr1, expr2, lib.AND);
[...]
cout << lib.solve(exprn).getConditionsOf(a);
もちろん、このライブラリにはもっと美しいAPIが含まれているでしょう。私はこれをメソッド呼び出しとして記述しましたが、これは、基盤となるメカニズムとして期待されるものを示すためだけのものです。つまり、ソースからソースへのコンパイラは必要ないこと、またはこの質問はソースコンパイルの最適化とは関係がないことを強調します。