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.
30 lines
783 B
Ruby
30 lines
783 B
Ruby
require_relative "types"
|
|
|
|
def _pr_str(obj, print_readably=true)
|
|
_r = print_readably
|
|
return case obj
|
|
when List
|
|
"(" + obj.map{|x| _pr_str(x, _r)}.join(" ") + ")"
|
|
when Vector
|
|
"[" + obj.map{|x| _pr_str(x, _r)}.join(" ") + "]"
|
|
when Hash
|
|
ret = []
|
|
obj.each{|k,v| ret.push(_pr_str(k,_r), _pr_str(v,_r))}
|
|
"{" + ret.join(" ") + "}"
|
|
when String
|
|
if obj[0] == "\u029e"
|
|
":" + obj[1..-1]
|
|
elsif _r
|
|
obj.inspect # escape special characters
|
|
else
|
|
obj
|
|
end
|
|
when Atom
|
|
"(atom " + _pr_str(obj.val, true) + ")"
|
|
when nil
|
|
"nil"
|
|
else
|
|
obj.to_s
|
|
end
|
|
end
|