mirror of
https://github.com/kanaka/mal.git
synced 2024-09-21 10:37:58 +03:00
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
|