mirror of
https://github.com/kanaka/mal.git
synced 2024-09-11 21:57:38 +03:00
- 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.
29 lines
1.0 KiB
Plaintext
29 lines
1.0 KiB
Plaintext
(de pr-str (Ast PrintReadably)
|
|
(let Value (MAL-value Ast)
|
|
(case (MAL-type Ast)
|
|
((true false nil)
|
|
(sym @) )
|
|
(string (if PrintReadably (repr Value) Value))
|
|
(keyword (pack ":" Value))
|
|
((number symbol) Value)
|
|
(fn "#<subr>")
|
|
(func "#<func>")
|
|
(list (pr-list Value PrintReadably "(" ")"))
|
|
(vector (pr-list Value PrintReadably "[" "]"))
|
|
(map (pr-list Value PrintReadably "{" "}"))
|
|
(atom (pack "(atom " (pr-str Value PrintReadably) ")"))
|
|
(T (pretty Value) (throw 'err (MAL-error (MAL-string "[pr-str] unimplemented type")))) ) ) )
|
|
|
|
(de repr (X)
|
|
(let Chars (chop X)
|
|
(if (not X)
|
|
"\"\""
|
|
(setq Chars (replace Chars "\\" "\\\\"))
|
|
(setq Chars (replace Chars "\"" "\\\""))
|
|
(setq Chars (replace Chars "\n" "\\n"))
|
|
(pack "\"" Chars "\"") ) ) )
|
|
|
|
(de pr-list (Forms PrintReadably Starter Ender)
|
|
(let Values (mapcar '((Form) (pr-str Form PrintReadably)) Forms)
|
|
(pack Starter (glue " " Values) Ender) ) )
|