aboutsummaryrefslogtreecommitdiff
path: root/clojure/src/step7_quote.clj
diff options
context:
space:
mode:
Diffstat (limited to 'clojure/src/step7_quote.clj')
-rw-r--r--clojure/src/step7_quote.clj27
1 files changed, 14 insertions, 13 deletions
diff --git a/clojure/src/step7_quote.clj b/clojure/src/step7_quote.clj
index 398b7d2..e68a4cc 100644
--- a/clojure/src/step7_quote.clj
+++ b/clojure/src/step7_quote.clj
@@ -1,10 +1,10 @@
(ns step7-quote
(:require [clojure.repl]
- [types]
[readline]
- [reader]))
-
-(declare EVAL)
+ [reader]
+ [printer]
+ [env]
+ [core]))
;; read
(defn READ [& [strng]]
@@ -12,6 +12,7 @@
(reader/read-string strng)))
;; eval
+(declare EVAL)
(defn is-pair [x]
(and (sequential? x) (> (count x) 0)))
@@ -31,7 +32,7 @@
(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))
@@ -53,12 +54,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))
'quote
@@ -84,7 +85,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)
@@ -92,22 +93,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)))
-(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)