Exemplo n.º 1
0
def eval_ast(ast, env):
    if is_vector(ast):
        return make_vector(EVAL(elem, env) for elem in ast)
    if is_hashmap(ast):
        return make_hashmap_from_pydict(
            {key: EVAL(value, env) for key, value in items(ast)}
        )
    if is_symbol(ast):
        return env.get(ast)
    elif is_list(ast):
        return make_list(EVAL(elem, env) for elem in ast)
    else:
        return ast
Exemplo n.º 2
0
Arquivo: core.py Projeto: davemus/mal
def py_eval(expression):
    result = eval(expression)
    if isinstance(result, (tuple, list)):
        return make_list(result)
    elif isinstance(result, str):
        return result
    elif isinstance(result, bool):
        return result
    elif isinstance(result, dict):
        return make_hashmap_from_pydict(result)
    elif isinstance(result, (int, float)):
        return make_number(result)
    elif result is None:
        return NIL
    raise TypeError(f'Can\'t convert python type {type(result)} to mal type')