Commit | Line | Data |
---|---|---|
ea81a808 JM |
1 | import mal_types as types |
2 | ||
3 | def _pr_str(obj, print_readably=True): | |
4 | _r = print_readably | |
5 | if types._list_Q(obj): | |
6 | return "(" + " ".join(map(lambda e: _pr_str(e,_r), obj)) + ")" | |
7 | elif types._vector_Q(obj): | |
8 | return "[" + " ".join(map(lambda e: _pr_str(e,_r), obj)) + "]" | |
9 | elif types._hash_map_Q(obj): | |
10 | ret = [] | |
11 | for k in obj.keys(): | |
12 | ret.extend((_pr_str(k), _pr_str(obj[k],_r))) | |
13 | return "{" + " ".join(ret) + "}" | |
14 | elif types._string_Q(obj): | |
15 | if print_readably: | |
16 | return '"' + obj.encode('unicode_escape').replace('"', '\\"') + '"' | |
17 | else: | |
18 | return obj | |
19 | elif types._nil_Q(obj): | |
20 | return "nil" | |
21 | elif types._true_Q(obj): | |
22 | return "true" | |
23 | elif types._false_Q(obj): | |
24 | return "false" | |
25 | elif types._atom_Q(obj): | |
26 | return "(atom " + _pr_str(obj.val,_r) + ")" | |
27 | else: | |
28 | return obj.__str__() | |
29 |