展开递归表达式
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))'
我最近一直在使用 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))'