         :else #{}))
     tree))
 
-(defn eval-expr-in-env
+#_(defn eval-expr-in-env
   "Evaluate the expression in an environment"
   [tree env]
   (walk/postwalk

        :else node))
    tree))

(defn compile-eval-expr
  "Compile the expression in optimal code"
  [tree symbol-env]
  (walk/postwalk
    (fn [node]
      (cond
        (keyword? node) `(~node ~symbol-env)
        (vector? node) `(~(first node) ~@(rest node))
        :else node))
    tree))

(defprotocol IEvalExpr
  (eval-expr [this] "Evaluate the expression")


(defn keyword->symbol [k] (-> k name symbol))

#_(defn collect-dependencies
  "Collect all the dependencies of an environment"
  [tree]
  (walk/postwalk
