问题标签 [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.

0 投票
4 回答
378 浏览

rpn - 是否可以表示所有 RPN 表达式,使得所有运算符出现在左侧,所有操作数出现在右侧?

我已经说服自己他们做不到。

举个例子:

4 4 + 4 /

堆栈:4 堆栈:4 4 4 + 4 = 8 堆栈:8 堆栈:8 4 8 / 4 = 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

如果您有能力交换堆栈上的项目,那么是的,有可能,否则,没有。

想法?

0 投票
7 回答
11735 浏览

c# - 转换逆波兰表示法

使用 C++ 或 C# 时,有什么方法可以将逆波兰表示法解释为“正常”数学表示法?我在一家工程公司工作,所以他们偶尔会使用 RPN,我们需要一种方法来转换它。有什么建议么?

0 投票
2 回答
392 浏览

parallel-processing - 计算公式结果的最佳方法?

我目前有一个可以包含 100 个用户定义公式的应用程序。目前,我使用反向波兰符号来执行计算(将值和变量推入堆栈,然后将它们从堆栈中弹出并进行评估)。开始并行化此过程的最佳方法是什么?我应该看功能语言吗?

计算是在数字数组上执行的,例如,简单的 A+B 实际上可能意味着 100 次加法。我目前正在使用 Delphi,但这不是未来的要求。我将使用最适合这项工作的工具。公式也可能相互依赖,例如,我们可能有一个公式 C=A+B 和第二个公式 D=C+A。

0 投票
1 回答
949 浏览

algorithm - 解析具有未定义数量参数的表达式

我正在尝试将自制语言中的字符串解析为一种树,例如:

应该导致:

#、* 和 -> 是符号。a、b1 等是文本。

从那一刻起,我只知道评估表达式的 rpn 方法,我目前的解决方案如下。如果我在每个符号之后只允许一个文本标记,我可以很容易地将表达式首先转换为 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 * #

这也是可解析的,似乎可以解决问题。

那说:

  1. 有没有人有类似的经验并且可以说它是或不是未来可行的解决方案?
  2. 是否有更好的方法来解析具有未定义的运算符数量的表达式?
  3. 你能指点我一些好的资源吗?

笔记。是的,我知道这个例子非常类似于 Lisp 前缀表示法,也许要走的路是添加一些括号,但我在这里没有任何经验。但是,源文本不得包含任何人工括号,而且我不确定如何处理潜在的中缀混合,如 # a * b -> [if value1 = value2] c -> d。

谢谢你的帮助。

编辑:似乎我正在寻找的是带有可变数量参数的后缀表示法的来源。

0 投票
3 回答
4285 浏览

c - 如何使用scanf检测C中的运算符与int?

如何在我的 RPN 计算器中读取以下输入,以便无论顺序如何都能找到运算符?

2
2+
4

截至目前,我的 scanf 只看到字符串中的第一个字符,我只能这样做:

2
2
+
4

我也在尝试为整数与浮点模式添加一个选项。(例如,当输入“i”时,以浮点运算,反之亦然。)

0 投票
9 回答
2500 浏览

math - 用于数学解析的基于堆栈的表达式评估的效率

出于学术目的,我必须编写一个绘制用户输入表达式的应用程序,例如: f(x) = 1 - exp(3^(5*ln(cosx)) + x)

我选择编写解析器的方法是使用 Shunting-Yard 算法转换 RPN 中的表达式,将像“cos”这样的原始函数视为一元运算符。这意味着上面编写的函数将转换为一系列标记,例如:

问题是要绘制函数,我必须多次评估它,因此对每个输入值应用堆栈评估算法效率非常低。我该如何解决这个问题?我必须忘记 RPN 的想法吗?

0 投票
2 回答
8995 浏览

c# - 后缀和一元/二元运算符的中缀

我有一段代码将中缀表达式转换为内存中的表达式树。这工作得很好。只有一个小麻烦。我只是连接解决如何正确地涉及一元运算符(正确的关联运算符)。

使用以下中缀表达式:

我希望 RPN 为:

然而,我能找到的在线中缀后置转换器都没有以我期望的方式处理这个例子。有没有人对处理右关联运算符有明确的解释,特别是可能被误认为一元运算符的二元运算符?

编辑/澄清:我想知道在从中缀到后缀的翻译过程中如何处理一元运算符。即:例如将相同的“-”字符识别为一元而不是二元运算符,因此具有不同的优先级。我会考虑使用可能具有两种状态的状态机,但是......?

0 投票
3 回答
1801 浏览

c++ - 多种数据类型的 C++ 堆栈(RPN 矢量计算器)

我用 C++ 设计了一个快速且基本的向量算术库。当我需要快速叉积或向量之间的角度时,我会从命令行调用程序。我不使用 Matlab 或 Octave 或相关的,因为启动时间大于计算时间。同样,这是针对非常基本的操作。

我正在扩展这个程序,并将它作为一个 RPN 计算器工作,用于以下类型的操作:

(给出一个向量,另一个向量和“交叉”运算符;吐出叉积)

堆栈必须接受 3d 向量或标量,用于以下操作:

这个迷你计算器的词法分析器和解析器是微不足道的,但我似乎想不出一个创建内部堆栈的好方法。你将如何创建一个包含向量或双精度的堆栈(我汇总了我自己非常简单的向量类 - 不到一百行,它可以满足我的一切需要)。

如何创建一个接受 Vector 类或 double 类型元素的简单堆栈?

谢谢你。

0 投票
1 回答
440 浏览

lisp - 推文中的完整 RPN Expr-Eval 程序?——“是的,我们可以!”,使用 LISP

程序(115 个字符)

一个简单的测试:

它返回9

有人对在一条推文中编写一个中缀到 RPN 程序有一些好的想法吗?我失败了。我可以用 235 个字符写出那个。

0 投票
3 回答
7055 浏览

python - 这个 Python 后缀表示法(反向波兰表示法)解释器能否变得更加高效和准确?

这是一个 Python 后缀符号解释器,它利用堆栈来评估表达式。是否有可能使这个功能更高效和准确?