aboutsummaryrefslogtreecommitdiff
path: root/clojure/src/step5_tco.clj
diff options
context:
space:
mode:
authorJoel Martin <github@martintribe.org>2014-04-09 23:58:27 -0500
committerJoel Martin <github@martintribe.org>2014-04-09 23:58:27 -0500
commita34b02006527d28db5df5c6553be804770b81f79 (patch)
tree526fe400e5a8c34b32a3d93439197db09c7f84ad /clojure/src/step5_tco.clj
parentedc3b0640f1b773e185550448e2086279f7b1a7f (diff)
downloadmal-a34b02006527d28db5df5c6553be804770b81f79.tar.gz
mal-a34b02006527d28db5df5c6553be804770b81f79.zip
Fix metadata on functions.
- Don't use metadata to store ast, env, params data. - In Clojure, store metadata on the :meta key of the real metadata. This also allows using any datatype as metadata.
Diffstat (limited to 'clojure/src/step5_tco.clj')
-rw-r--r--clojure/src/step5_tco.clj13
1 files changed, 7 insertions, 6 deletions
diff --git a/clojure/src/step5_tco.clj b/clojure/src/step5_tco.clj
index 7739029..f4f0107 100644
--- a/clojure/src/step5_tco.clj
+++ b/clojure/src/step5_tco.clj
@@ -58,11 +58,12 @@
(recur a2 env)))
'fn*
- ^{:expression a2
- :environment env
- :parameters a1}
- (fn [& args]
- (EVAL a2 (env/env env a1 args)))
+ (with-meta
+ (fn [& args]
+ (EVAL a2 (env/env env a1 args)))
+ {:expression a2
+ :environment env
+ :parameters a1})
;; apply
(let [el (eval-ast ast env)
@@ -80,7 +81,7 @@
(def repl-env (env/env))
(defn rep
[strng]
- (PRINT (EVAL (READ strng), repl-env)))
+ (PRINT (EVAL (READ strng) repl-env)))
(defn _ref [k,v] (env/env-set repl-env k v))