У меня есть AST ANTLR3, который мне нужно пройти, используя обход в глубину, который я реализовал примерно как следующий Clojure:
(defn walk-tree [^CommonTree node]
(if (zero? (.getChildCount node))
(read-string (.getText node))
(execute-node
(map-action node)
(map walk-tree (.getChildren node)))))))
Я хотел бы преобразовать это в хвостовую рекурсию, используя цикл... recur, но я не смог понять, как эффективно использовать явный стек для этого, так как мне нужен обход после заказа.