By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,996 Members | 1,343 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,996 IT Pros & Developers. It's quick & easy.

help with recursion on GP project

P: n/a
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])
Jan 14 '07 #1
Share this Question
Share on Google+
1 Reply


P: n/a
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(evaluate, ops))
else:
return expr

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

But it's rather slow...

Bye,
bearophile

Jan 14 '07 #2

This discussion thread is closed

Replies have been disabled for this discussion.