展开递归表达式

unfolding recursive expressions

我最近一直在使用 Python 中的递归表达式。 此类表达式的示例如下:

['+', [['*', ['i0','i1']], ['*', ['i2','i3']]]]

我正在尝试将这些表达式转换成我可以直接计算的东西,例如,

(i0*i1) + (i2*i3)

直觉上,似乎需要某种形式的递归,但是,出于某种原因,我无法解决这个问题。

谢谢!

这是一个可能的解决方案:

def build_expression(x):
    operator = x[0]
    operand1 = x[1][0] if isinstance(x[1][0], str) else '('+build_expression(x[1][0])+')'
    operand2 = x[1][1] if isinstance(x[1][1], str) else '('+build_expression(x[1][1])+')'
    return operand1 + operator + operand2

你可以这样使用它:

build_expression(['+', [['*', ['i0','i1']], ['*', ['i2','i3']]]])

同时可以处理两个以上操作数的方式:

def transform(e):
    if isinstance(e, str):
        return e
    return '(' + e[0].join(map(transform, e[1])) + ')'

演示:

>>> transform(['+', [['*', ['i0', 'i1']], ['*', ['i2', 'i3', 'i4']]]])
'((i0*i1)+(i2*i3*i4))'