0

注意:- 我不是在谈论增量和减量运算符。我说的是前缀和后缀表达式。

python中的示例:-

def calculate(a, b, c, d):
    return a * ( b + c ) / d 

calculate(1,2,3,4)

我知道 python 不支持前缀或后缀表达式。但是想象一下如果python支持后缀表达式,我可以这样写函数

def calculate(a, b, c, d):
    return a b c + * d /

calculate(1,2,3,4)

我在此链接中读到评估后缀表达式比中缀表达式更快

  1. 计算中缀表达式所需的时间是 O(n^2) -> reason - 需要找到具有最高优先级的运算符。
  2. 评估后缀表达式所需的时间是 O(n) -> 原因 - 无需查找运算符的优先级。我们只需要从左到右进行评估。

如果是这种情况,那么为什么流行的编程语言(如 C、C++、Java、Python、Ruby 或 PHP)不原生支持后缀表达式呢?

4

1 回答 1

3

我在此链接中读到评估后缀表达式比中缀表达式更快。计算中缀表达式所需的时间是 O(n^2) -> reason - 需要找到具有最高优先级的运算符。

那个答案是错误的。它声称的关于编译器如何解析表达式的描述是无稽之谈。但是,即使它是正确的,这里的n也是微不足道的。典型的表达式有什么,1-5 个运算符?即使是二次算法,这也是小菜一碟。

此外,语言并非旨在从解析器中获取微性能收益。它们旨在帮助人类以最大的可读性、简洁性、表达性或每种语言具有的任何其他目标来表达他们的想法。我什至无法想象有人编写解析器的速度如此之慢以至于加速实际上会很明显。

如果是这种情况,那么为什么流行的编程语言(如 C、C++、Java、Python、Ruby 或 PHP)不原生支持后缀表达式呢?

人们熟悉中缀表示法。由于性能参数是错误的,因此没有令人信服的理由让流行语言使用前缀或后缀表示法。使用其中任何一种几乎可以保证一种语言不会成为主流(对不起,Lisp粉丝!)。

于 2021-03-11T04:47:02.083 回答