【问题标题】:Comparing rpn (postfix) expressions for equivalency比较 rpn(后缀)表达式的等价性
【发布时间】:2018-07-02 05:32:17
【问题描述】:

如何比较任意两个后缀表示的表达式的等价性?

在最简单的例子中,foo(a, b) 返回 True

a = [3, 5, 'MUL']

b = [5, 3, 'MUL']

foo() 在 python 中会是什么样子?我想一种方法是评估这两个表达式并以某种方式对其进行规范化。我希望这是一个定义明确的过程,但还没有找到。

编辑 1:

这是一个措辞不当的问题。我会尝试更好/更多的例子,感谢您的耐心,因为我会尝试清楚准确地提出问题。

expr1 = [a, b, 'MUL']

expr2 = [b, a, 'MUL']

expr1 = [a, b, 1, 'ADD', 'MUL']

expr2 = [a, b, 'MUL', a, 'ADD']

【问题讨论】:

  • 你有计算符号的函数吗?还是您在这里也请人帮您创建代码?
  • 我有代码来评估后缀表达式。如果有用,请添加到原始问题。
  • 你能添加更多例子吗?
  • 根据一组可能参数的输出评估表达式并确定等效性似乎并不可靠(而且我没有什么可以支持该声明)。如果我有很多这样的比较要做,那么添加更多的评估会增加它所花费的时间。还有其他方法可以考虑这个问题/解决方案吗?

标签: python postfix-notation rpn


【解决方案1】:

这里我已经用解决方案尝试了你的问题,它有效,如果你有更多选择,你可以添加:

a = [3, 5, 'MUL']
b = [5, 3, 'MUL']


def postfix_calc(value, z):
    return {
        'MUL': lambda c: a[0]*a[1],
        'ADD': lambda c: a[0]+a[1],
        'SUB': lambda c: a[0]-a[1],
        'DIV': lambda c: a[0]/a[1]
    }.get(value)(z)


def foo(x, y):
    val1 = postfix_calc(x[2], x)
    val2 = postfix_calc(y[2], y)
    if val1 == val2:
        return True
    else:
        return False


print(foo(a,b))

【讨论】:

    【解决方案2】:

    因为你已经有了后缀评估。那你就可以这样了。

    foo(a,b):
        res_a = postfix(a)
        res_b = postfix(b)
        if res_a = res_b:
             return True
        return False
    

    我认为这是您正在寻找的最简单的解决方案?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-29
      • 2011-02-27
      • 2015-03-12
      • 2013-04-18
      • 2017-05-02
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      相关资源
      最近更新 更多