diff options
Diffstat (limited to 'clojure/src/step6_file.clj')
| -rw-r--r-- | clojure/src/step6_file.clj | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/clojure/src/step6_file.clj b/clojure/src/step6_file.clj index 2eb4e3d..a65b741 100644 --- a/clojure/src/step6_file.clj +++ b/clojure/src/step6_file.clj @@ -1,10 +1,10 @@ (ns step6-file (:require [clojure.repl] - [types] [readline] - [reader])) - -(declare EVAL) + [reader] + [printer] + [env] + [core])) ;; read (defn READ [& [strng]] @@ -12,9 +12,10 @@ (reader/read-string strng))) ;; eval +(declare EVAL) (defn eval-ast [ast env] (cond - (symbol? ast) (types/env-get env ast) + (symbol? ast) (env/env-get env ast) (seq? ast) (doall (map #(EVAL % env) ast)) @@ -36,12 +37,12 @@ (let [[a0 a1 a2 a3] ast] (condp = a0 'def! - (types/env-set env a1 (EVAL a2 env)) + (env/env-set env a1 (EVAL a2 env)) 'let* - (let [let-env (types/env env)] + (let [let-env (env/env env)] (doseq [[b e] (partition 2 a1)] - (types/env-set let-env b (EVAL e let-env))) + (env/env-set let-env b (EVAL e let-env))) (EVAL a2 let-env)) 'do @@ -61,7 +62,7 @@ :environment env :parameters a1} (fn [& args] - (EVAL a2 (types/env env a1 args))) + (EVAL a2 (env/env env a1 args))) ;; apply (let [el (eval-ast ast env) @@ -69,22 +70,22 @@ args (rest el) {:keys [expression environment parameters]} (meta f)] (if expression - (recur expression (types/env environment parameters args)) + (recur expression (env/env environment parameters args)) (apply f args)))))))) ;; print (defn PRINT [exp] (pr-str exp)) ;; repl -(def repl-env (types/env)) +(def repl-env (env/env)) (defn rep [strng] - (PRINT (EVAL (READ strng), repl-env))) + (PRINT (EVAL (READ strng) repl-env))) -(defn _ref [k,v] (types/env-set repl-env k v)) +(defn _ref [k,v] (env/env-set repl-env k v)) ;; Import types related functions -(doseq [[k v] types/types_ns] (_ref k v)) +(doseq [[k v] core/core_ns] (_ref k v)) ;; Defined using the language itself (_ref 'read-string reader/read-string) |
