   machine."
   (:require #+cljs [cljs.reader :as reader]
             ;; Maybe use clojure.core/read-string for Clojure?
-            #+clj [clojure.edn :as reader]
+            ;; #+clj [clojure.edn :as reader]
+            #+clj [clojure.tools.reader :as reader]
             #+clj [clojure.pprint :as pprint]))
 
 

    (nth frame-vector slot)))

(defn in-env? [env var]
  (loop [frames (frames env) n-frame 0]
    (if (empty? frames)
      false

(defmethod print-method Env [env writer]
  (.write writer (str "#" (print-str (class env)) "{:frames " (frames env) "}")))

(defn env [& frames]
  "Return a new environment containing `frames` in the given
  order (i.e., `(first frames)` is the first frame, etc.)."
  (->Env (vec (map vec (reverse frames))))) 

(defn env-value
  "Return the value at position `[frame slot]` in `vm-state`'s
  environment.  This is similar to `(get-in env [frame slot])` but
