aboutsummaryrefslogtreecommitdiff
path: root/ruby/printer.rb
blob: ef067a5ac00c37d0961e59adb23a42aca041682a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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