比较rpn(后缀)表达式是否等效

时间:2018-07-02 05:32:17

标签: python postfix-notation rpn

一个人如何比较两个后缀标记的表达式的等效性?

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

a = [3, 5, 'MUL']

b = [5, 3, 'MUL']

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

编辑1:

这是一个措辞不佳的问题。我将尝试使用更好/更多的示例,并感谢您在我尝试清晰,准确地提出问题时的耐心等待。

expr1 = [a, b, 'MUL']

expr2 = [b, a, 'MUL']

OR

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

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

2 个答案:

答案 0 :(得分:0)

因为您已经具有后缀评估。然后,您将拥有这样的东西。

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

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

答案 1 :(得分:0)

在这里,我尝试了一种解决方案,它可以解决问题,如果您有更多选择,可以添加:

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))