1
1
mirror of https://github.com/kanaka/mal.git synced 2024-10-27 14:52:16 +03:00
mal/impls/hy/env.hy
Joel Martin 8a19f60386 Move implementations into impls/ dir
- 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.
2020-02-10 23:50:16 -06:00

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)