развертывание рекурсивных выражений - PullRequest
0 голосов
/ 03 августа 2020

Недавно я работал с рекурсивными выражениями в Python. Пример такого выражения представлен как:

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

Я пытаюсь преобразовать подобные выражения во что-то, что я могу вычислить напрямую, например,

(i0*i1) + (i2*i3)

Интуитивно кажется, что некоторые требуется форма рекурсии, однако я по какой-то причине не могу осмыслить эту проблему.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 03 августа 2020

Способ, который также может обрабатывать более двух операндов:

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))'
1 голос
/ 03 августа 2020

Вот возможное решение:

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']]]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...