【问题标题】:unfolding recursive expressions展开递归表达式
【发布时间】:2020-08-03 12:35:15
【问题描述】:

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

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

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

(i0*i1) + (i2*i3)

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

谢谢!

【问题讨论】:

    标签: python recursion church-encoding


    【解决方案1】:

    一种也可以处理两个以上操作数的方式:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2020-11-09
        • 1970-01-01
        • 1970-01-01
        • 2016-03-19
        • 1970-01-01
        • 2012-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多