假设对‘a + 3 * b‘进行解释,其中a=2,b=5
代码很简单,就不再进行详细的解释了。
Num = lambda env, n: n
Var = lambda env, x: env[x]
Add = lambda env, a, b:_eval(env, a) + _eval(env, b)
Mul = lambda env, a, b:_eval(env, a) * _eval(env, b)
_eval = lambda env, expr:expr[0](env, *expr[1:])
env = {'a':2, 'b':5}
tree = (Add, (Var, 'a'),
(Mul, (Num, 3),
(Var, 'b')))
print _eval(env, tree)
输出结果为17