2014-04-03 07:23:37 +04:00
|
|
|
import mal_types as types
|
|
|
|
|
|
|
|
def _pr_str(obj, print_readably=True):
|
|
|
|
_r = print_readably
|
|
|
|
if types._list_Q(obj):
|
|
|
|
return "(" + " ".join(map(lambda e: _pr_str(e,_r), obj)) + ")"
|
|
|
|
elif types._vector_Q(obj):
|
|
|
|
return "[" + " ".join(map(lambda e: _pr_str(e,_r), obj)) + "]"
|
|
|
|
elif types._hash_map_Q(obj):
|
|
|
|
ret = []
|
|
|
|
for k in obj.keys():
|
|
|
|
ret.extend((_pr_str(k), _pr_str(obj[k],_r)))
|
|
|
|
return "{" + " ".join(ret) + "}"
|
|
|
|
elif types._string_Q(obj):
|
|
|
|
if print_readably:
|
2014-04-17 07:42:17 +04:00
|
|
|
return '"' + obj.encode('unicode_escape').decode('latin1').replace('"', '\\"') + '"'
|
2014-04-03 07:23:37 +04:00
|
|
|
else:
|
|
|
|
return obj
|
|
|
|
elif types._nil_Q(obj):
|
|
|
|
return "nil"
|
|
|
|
elif types._true_Q(obj):
|
|
|
|
return "true"
|
|
|
|
elif types._false_Q(obj):
|
|
|
|
return "false"
|
|
|
|
elif types._atom_Q(obj):
|
|
|
|
return "(atom " + _pr_str(obj.val,_r) + ")"
|
|
|
|
else:
|
|
|
|
return obj.__str__()
|
|
|
|
|