def process(tree): if isinstance(tree, HyExpression): fn = tree[0] ntree = HyExpression([fn] + [process(x) for x in tree[1:]]) if isinstance(fn, HyString): if fn in _hy_macros: m = _hy_macros[fn] obj = m(ntree) obj.replace(tree) return obj ntree.replace(tree) return ntree if isinstance(tree, HyList): obj = HyList([process(x) for x in tree]) obj.replace(tree) return obj if isinstance(tree, list): return [process(x) for x in tree] return tree