mirror of
https://github.com/kanaka/mal.git
synced 2024-10-27 14:52:16 +03:00
8a19f60386
- Reorder README to have implementation list after "learning tool" bullet. - This also moves tests/ and libs/ into impls. It would be preferrable to have these directories at the top level. However, this causes difficulties with the wasm implementations which need pre-open directories and have trouble with paths starting with "../../". So in lieu of that, symlink those directories to the top-level. - Move the run_argv_test.sh script into the tests directory for general hygiene.
32 lines
715 B
Hy
32 lines
715 B
Hy
(import [hy.models [HySymbol :as Sym]])
|
|
|
|
(defn env-new [&optional [outer None] [binds []] [exprs []]]
|
|
(setv env {:outer outer})
|
|
(while binds
|
|
(if
|
|
(= (Sym "&") (first binds))
|
|
(do (assoc env (nth binds 1) (tuple exprs)) (break))
|
|
|
|
True
|
|
(do (assoc env (first binds) (first exprs))
|
|
(setv binds (list (rest binds))
|
|
exprs (list (rest exprs))))))
|
|
env)
|
|
|
|
(defn env-find [env k]
|
|
(if
|
|
(.has_key env k) env
|
|
(get env ':outer) (env-find (get env ':outer) k)
|
|
True None))
|
|
|
|
(defn env-get [env k]
|
|
(setv e (env-find env k))
|
|
(if-not e
|
|
(raise (Exception (+ "'" k "' not found"))))
|
|
(get e k))
|
|
|
|
(defn env-set [env k v]
|
|
(assoc env k v)
|
|
v)
|
|
|