1
1
mirror of https://github.com/kanaka/mal.git synced 2024-08-17 17:50:24 +03:00
mal/impls/picolisp/printer.l
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

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) ) )