0

例えば:

3 + 4 * max(2, avg(6, 8, 2, 4,...), 6, ...)

私の最初の考えは、パラメーターのカウントである特別なトークンを作成し、「)」が検出されたときにそれをスタックにプッシュすることです。しかし、パラメーター自体がパラメーターを持つ関数である可能性がある場合に、カウントを維持する方法がわかりません。

4

1 に答える 1

0

操車場アルゴリズムをわずかに変更し、プレフィックス操作の直後に出力スタックに特別なトークン(@と呼ばれる)を挿入することで、問題を解決しました。

例:4 * max(2、avg(6、8)、32)+ 3は、次の出力スタックを生成します:+ 3 * Max 32 Avg 8 6 @ 2 @ 4

このスタックを左から右に評価する場合、関数Avgは、最初の@トークンのように見えるときにオペランドのポップを停止することを認識しているため、関数maxも同様です。

于 2012-11-05T15:56:10.890 に答える