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: return '"' + obj.encode('unicode_escape').replace('"', '\\"') + '"' 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__()
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 len(obj) > 0 and obj[0] == types._u('\u029e'): return ':' + obj[1:] elif print_readably: return '"' + _escape(obj) + '"' 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__()
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 len(obj) > 0 and obj[0] == types._u('\u029e'): return ':' + obj[1:] elif print_readably: return '"' + _escape(obj) + '"' 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__()
def seq(obj): if types._list_Q(obj): return obj if len(obj) > 0 else None elif types._vector_Q(obj): return List(obj) if len(obj) > 0 else None elif types._string_Q(obj): return List([c for c in obj]) if len(obj) > 0 else None elif obj == None: return None else: throw ("seq: called on non-sequence")
def seq(args): a0 = args[0] if isinstance(a0, MalVector): if len(a0) == 0: return nil return MalList(a0.values) elif isinstance(a0, MalList): if len(a0) == 0: return nil return a0 elif types._string_Q(a0): assert isinstance(a0, MalStr) if len(a0) == 0: return nil return MalList([MalStr(unicode(c)) for c in a0.value]) elif a0 is nil: return nil else: throw_str("seq: called on non-sequence")
def string_Q(args): return wrap_tf(types._string_Q(args[0])) def symbol(args):