def standard_env():
_env = Env()
_env.update(vars(math))
_env.update({
# maths
'+': op.add, '-': op.sub,
'*': op.mul, '/': op.truediv,
'//': op.floordiv, '%': op.mod,
'**': lambda a, b: a ** b,
# binaires
'^': op.xor, '|': op.or_,
'~': lambda a: ~a, '&': op.and_,
'rshift': lambda a, b: a >> b, 'lshift': lambda a, b: a << b,
# Conditions
'>': op.gt, '<': op.lt, '>=': op.ge,
'<=': op.le, '!=': op.ne, '==': op.eq,
'&&': lambda a, b: a and b,
# listes
'@': op.getitem, '@=': lambda lst, v: op.setitem(lst, v[0], v[1]), '@~': op.delitem, 'length': len,
'@@': lambda x: x[1:], 'count': lambda x, y: x.count(y),
'cons': lambda x, y: [x] + y if not isinstance(x, list) and isinstance(y, list) else x + [y],
'setitem': op.setitem,
# strings
'split': lambda x, y: x.split(y), 'concat': lambda *x: "".join(str(c) for c in x),
# autres
'time': time.time, 'round': round, 'abs': abs, 'zip': lambda *x: list(zip(*x)),
'map': lambda *x: list(map(*x)), 'max': max, 'min': min,
'print': lambda *x: print(mtoa(*x), flush=True), 'printc': lambda x: print(x, end='', flush=True), 'input': input,
'include': lambda x: _env.update({x: __import__(x)}),
# fichiers
'open-input-file': lambda f: open(f, 'r'), 'open-output-file': lambda f: open(f, 'w'), 'close-file': lambda f: f.close(),
'read-file': lambda f: f.read(), 'write-in-file': lambda f, s: f.write(s),
# types
'int': lambda x: int(x), 'float': lambda x: float(x), 'number?': lambda x: isinstance(x, (int, float)),
'bool': lambda x: bool(x), 'bool?': lambda x: isinstance(x, bool),
'str': lambda x: str(x), 'str?': lambda x: isinstance(x, str),
'list': lambda *x: list(x), 'list?': lambda x: isinstance(x, list),
'dict': lambda k, v: dict(zip(k, v)), 'dict?': lambda x: isinstance(x, dict),
'type': lambda x: type(x).__name__,
# constantes
'$10': '\n', '$13': '\r', '$9': '\t',
})
return _env
评论列表
文章目录