Merge pull request #217 from dubek/lua-interop
[jackhill/mal.git] / mal / env.mal
CommitLineData
31690700
JM
1;; env
2
3(def! bind-env (fn* [env b e]
4 (if (empty? b)
5 env
6
7 (if (= "&" (str (first b)))
8 (assoc env (str (nth b 1)) e)
9
10 (bind-env (assoc env (str (first b)) (first e))
11 (rest b) (rest e))))))
12
13(def! new-env (fn* [& args]
14 (if (<= (count args) 1)
15 (atom {"--outer--" (first args)})
16 (atom (bind-env {"--outer--" (first args)}
17 (nth args 1) (nth args 2))))))
18
19(def! env-find (fn* [env k]
20 (let* [ks (str k)
21 data @env]
22 (if (contains? data ks)
23 env
24 (if (get data "--outer--")
25 (env-find (get data "--outer--") ks)
26 nil)))))
27
28(def! env-get (fn* [env k]
29 (let* [ks (str k)
30 e (env-find env ks)]
31 (if e
32 (get @e ks)
33 (throw (str "'" ks "' not found"))))))
34
35(def! env-set (fn* [env k v]
36 (do
37 (swap! env assoc (str k) v)
38 v)))
39
40;;(prn "loaded env.mal")