2

私は C++ でのパターン マッチングを調べていましたが、問題に対する機能的なアプローチであると思われるMach7や、最も一般的な分母であると思われるより一般的なVisitor Patternなどの中で、すべてを行うことができますが、優れているのは特定のケース。

数式を操作したいと思います (単純化、評価、および微分方程式の解法や積分などの計算を記号的に実行します)。はい、最終的にはコンピューター代数システムを目指しています。入力については、Boost.Spirit(X3)を使用して何らかの形式の入力を解析することを検討しています(現在、基本的なLaTeXサポートを取得して遊んでいますが、インデックスと下/上付きが問題です...)。

次に、 Boost.Spiritを使用して入力「テキスト」を解析するだけでなく、ライブラリの非パーサー コンポーネントを使用して、結果の AST に対して実際に数学的操作を実行する というクレイジーなアイデアに行き着きました。これは、私の目標に一致するパターンに十分な汎用性がありますか、それとも他のソリューションを検討する必要がありますか? 他の CAS が内部でどのように機能するかについてのドキュメントを見つけようとしましたが、Maximaのようなものの間違いなく素晴らしいコードを調べるまでは、数学的 AST の非常に単純な実装に関する情報を見つけることができないようです。そのため、Boost.Spirit が最終的に必要になることを実行できるかどうかを判断するための入力情報はほとんどありません。

4

1 に答える 1

4

私は、記号代数とその要件について助言する資格はありません。

ただし、ブーストスピリットについては、 1つか2つ知っています。

私が言えることは、それをしないでください!

EDSL と Phoenix アクターである「ゆがんだ」現実の中で設計することがより困難になるような複雑な責任をパーサーに負わせたくはありません。

実際、私はこのアドバイスを何度も繰り返してきました (たとえば、ブースト スピリット: "セマンティック アクションは悪です"?を参照してください) は、これに最も関連していますが、いくつかのチャット ルームで、また場合によっては問題が解決されない場合の回答でそれを深めました。解析と処理を混同して発生したようです)。

于 2016-01-10T21:12:50.093 に答える