help with recursion on GP project

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • none

    #1

    help with recursion on GP project

    I'm trying to create a recursive function to evaluate the expressions
    within a list. The function uses eval() to evaluate the list. Like a
    lisp interpreter but very limited.
    What I'm looking for is a function to recursively traverse the list and
    provide answers in place of lists, so that ...
    Example = ['add', ['sub', 5, 4], ['mul', 3, 2]]
    Becomes: Example = ['add', 1, 6]
    Becomes: Example = 7
    *Functions are defined in the script

    The code I currently have, which isn't pretty (bottom), doesn't work
    because it doesn't return the value of the evaluated list. But I can't
    figure out how to do that. Any help would be greatly appreciated.

    Jack Trades


    def recursive(tree) :
    if type(tree[1]) != type([]) and type(tree[2]) != type([]):
    eval(a[0]+'('+str(tree[1])+','+str(tree[2])+')')
    if type(tree[2]) == type([]):
    recursive(tree[2])
    if type(tree[1]) == type([]):
    recursive(tree[1])
  • bearophileHUGS@lycos.com

    #2
    Re: help with recursion on GP project

    First possible raw solution:

    from operator import add, sub, mul, div, neg

    def evaluate(expr):
    if isinstance(expr , list):
    fun, ops = expr[0], expr[1:]
    return fun(*map(evalua te, ops))
    else:
    return expr

    example = [add, [add, [sub, 5, 4], [mul, 3, 2]], [neg, 5]]
    print evaluate(exampl e)

    But it's rather slow...

    Bye,
    bearophile

    Comment

    Working...