問題タブ [rpn]
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.
rpn - すべての RPN 式は、すべての演算子が左側に表示され、すべてのオペランドが右側に表示されるように表現できますか?
私は彼らができないと確信しました。
たとえば、次のとおりです。
4 4 + 4 /
スタック: 4 スタック: 4 4 4 + 4 = 8 スタック: 8 スタック: 8 4 8 / 4 = 2 スタック: 2
オペランドがすべて最初になるように、同じ演算子とオペランドを使用して上記の式を記述する方法は 2 つあります。"4 4 4 + /" と "4 4 4 / +" で、どちらも 2 に評価されません。
"4 4 4 + /" スタック: 4 スタック: 4 4 スタック: 4 4 4 4 + 4 = 8 スタック: 4 8 4 / 8 = 0.5 スタック: 0.5
「4 4 4 / +」 スタック: 4 スタック: 4 4 スタック: 4 4 4 4 / 4 = 1 スタック: 4 1 4 + 1 = 5 スタック: 5
スタック上のアイテムを交換できる場合は、可能です。そうでない場合は、できません。
考え?
c# - 逆ポーランド記法の変換
C ++またはC#のいずれかを使用する場合、逆ポーランド記法を「通常の」数学表記に解釈する方法はありますか?私はエンジニアリング会社で働いているので、彼らは時々RPNを使用し、それを変換する方法が必要です。助言がありますか?
parallel-processing - 式の結果を計算する最良の方法は?
私は現在、何百ものユーザー定義式を含むことができるアプリケーションを持っています。現在、逆ポーランド記法を使用して計算を実行しています (値と変数をスタックにプッシュし、スタックからポップして評価します)。このプロセスの並列化を開始する最良の方法は何ですか? 関数型言語を検討する必要がありますか?
計算は数値の配列に対して実行されるため、たとえば、単純な A+B は実際には数百の加算を意味する可能性があります。私は現在 Delphi を使用していますが、これは今後の要件ではありません。その仕事に最も適したツールを使用します。数式は相互に依存する場合もあるため、たとえば、1 つの数式 C=A+B と 2 つ目の数式 D=C+A がある場合があります。
algorithm - 引数の数が定義されていない式の解析
自作言語の文字列を一種のツリーに解析しようとしています。
結果は次のようになります。
#、*、-> は記号です。a、b1 などはテキストです。
その瞬間から、式を評価するためのrpnメソッドしか知らないので、現在の解決策は次のとおりです。各シンボルの後に 1 つのテキスト トークンのみを許可する場合、最初に式を RPN 表記 (b = b1 b2; d = d1 d2; f = f1 f2) に簡単に変換し、ここから解析できます。
abc -> * de -> * # fg * #
ただし、テキスト トークンとその他のものをマージすると、問題が発生するようです。私のアイデアは、マーカー トークン (M) を作成することだったので、RPN は次のようになります。
a M b2 b1 M c -> * M d2 d1 M e -> * # f2 f1 M g * #
これも解析可能で、問題を解決しているようです。
それは言った:
- そのようなことを経験したことがあり、それが将来の実行可能な解決策である、または実行できないと言える人はいますか?
- 演算子のアリティが定義されていない式を解析するためのより良い方法はありますか?
- 良いリソースを教えてもらえますか?
ノート。はい、私はこの例が Lisp のプレフィックス表記法に非常によく似ていることを知っています。また、いくつかのブラケットを追加する方法があるかもしれませんが、ここでの経験はありません。ただし、ソース テキストには人為的なブラケットを含めてはいけません。また、# a * b -> [if value1 = value2] c -> d のような潜在的な中置 mixin についてどうすればよいかわかりません。
助けてくれてありがとう。
編集:私が探しているのは、可変数の引数を持つ後置表記のソースのようです。
c - scanf を使用して C で演算子と int を検出するにはどうすればよいですか?
RPN 計算機で次の入力を読み取って、順序に関係なく演算子を見つけるにはどうすればよいですか?
2
2+
4
今のところ、私の scanf は文字列の最初の文字しか認識せず、これしかできません:
2
2
+
4
また、整数対浮動小数点モードのオプションを追加しようとしています。(ex. 'i' を入力すると浮動小数点で動作し、その逆も同様です。)
math - 数学解析のためのスタックベースの式評価の効率
学術的な目的で、次のようなユーザー入力式をプロットするアプリケーションを作成する必要があります。f(x)= 1 --exp(3 ^(5 * ln(cosx))+ x)
パーサーを作成するために私が選択したアプローチは、RPNの式をShunting-Yardアルゴリズムで変換し、「cos」などのプリミティブ関数を単項演算子として扱うことです。これは、上記の関数が次のような一連のトークンに変換されることを意味します。
問題は、関数をプロットするために何度も評価する必要があるため、各入力値にスタック評価アルゴリズムを適用することは非常に非効率的であるということです。どうすればこれを解決できますか?RPNのアイデアを忘れる必要がありますか?
c# - Postfix および単項/二項演算子へのインフィックス
中置式をメモリ内の式ツリーに変換するコードがあります。これはうまくいきます。小さなトラブルが 1 つだけあります。単項演算子 (正しい連想演算子) を正しく使用する方法を接続するだけです。
次の中置式を使用:
私は次のRPNを期待します:
しかし、私が見つけることができるオンラインの中置後置変換ツールはどれも、私が期待する方法でこの例を処理することはできません。右結合演算子、特に単項演算子と間違われる可能性のある二項演算子の処理について明確な説明がある人はいますか?
編集/明確化:中置から後置への変換中に単項演算子を処理する方法を知りたいです。つまり、たとえば、同じ「-」文字を二項演算子ではなく単項として認識し、優先順位が異なります。おそらく2つの状態を持つステートマシンを使用することを考えますが...?
c++ - 複数のデータ型の C++ スタック (RPN ベクトル計算機)
C++ で簡単で基本的なベクトル演算ライブラリを設計しました。高速の外積やベクトル間の角度が必要な場合は、コマンド ラインからプログラムを呼び出します。起動時間が計算時間よりも長いため、Matlab や Octave などは使用しません。繰り返しますが、これは非常に基本的な操作です。
私はこのプログラムを拡張しており、次のタイプの操作の RPN 計算機として機能するようにします。
(1 つのベクトル、別のベクトル、および「交差」演算子を指定します。外積を吐き出します)
スタックは、次のような操作のために、3d ベクトルまたはスカラーを受け入れる必要があります。
このミニ計算機のレクサーとパーサーは自明ですが、内部スタックを作成するための良い方法が思いつかないようです。ベクトルまたは double を含むためのスタックをどのように作成しますか (私は独自の非常に単純なベクトル クラスをロールアップしました - 100 行未満で、必要なすべてを実行します)。
クラス Vector または型 double の要素を受け入れる単純なスタックを作成するにはどうすればよいですか?
ありがとうございました。
lisp - ツイート内の完全な RPN Expr-Eval プログラム? -- 「YES WE CAN!」、LISP を使用
プログラム (115 文字)
簡単なテスト:
そして、それは戻ります9
1 つのツイート内に Infix-to-RPN プログラムを記述することについて、良いアイデアを持っている人はいますか? 私は失敗しました。私は235文字でそれを書くことができます。
python - このPython後置記法(逆ポーランド記法)インタープリターをより効率的かつ正確にすることはできますか?
これは、式を評価するためにスタックを利用するPython後置記法インタープリターです。この関数をより効率的かつ正確にすることは可能ですか?