function EVAL(ast, env)
if !isa(ast, Array) return eval_ast(ast, env) end
+ if isempty(ast) return ast end
# apply
if :def! == ast[1]
function EVAL(ast, env)
if !isa(ast, Array) return eval_ast(ast, env) end
+ if isempty(ast) return ast end
# apply
if :def! == ast[1]
while true
#println("EVAL: $(printer.pr_str(ast,true))")
if !isa(ast, Array) return eval_ast(ast, env) end
+ if isempty(ast) return ast end
# apply
if :def! == ast[1]
while true
#println("EVAL: $(printer.pr_str(ast,true))")
if !isa(ast, Array) return eval_ast(ast, env) end
+ if isempty(ast) return ast end
# apply
if :def! == ast[1]
while true
#println("EVAL: $(printer.pr_str(ast,true))")
if !isa(ast, Array) return eval_ast(ast, env) end
+ if isempty(ast) return ast end
# apply
if :def! == ast[1]
function ismacroCall(ast, env)
return isa(ast, Array) &&
+ !isempty(ast) &&
isa(ast[1], Symbol) &&
env_find(env, ast[1]) != nothing &&
isa(env_get(env, ast[1]), MalFunc) &&
# apply
ast = macroexpand(ast, env)
if !isa(ast, Array) return eval_ast(ast, env) end
+ if isempty(ast) return ast end
if :def! == ast[1]
return env_set(env, ast[2], EVAL(ast[3], env))
function ismacroCall(ast, env)
return isa(ast, Array) &&
+ !isempty(ast) &&
isa(ast[1], Symbol) &&
env_find(env, ast[1]) != nothing &&
isa(env_get(env, ast[1]), MalFunc) &&
# apply
ast = macroexpand(ast, env)
if !isa(ast, Array) return eval_ast(ast, env) end
+ if isempty(ast) return ast end
if :def! == ast[1]
return env_set(env, ast[2], EVAL(ast[3], env))
function ismacroCall(ast, env)
return isa(ast, Array) &&
+ !isempty(ast) &&
isa(ast[1], Symbol) &&
env_find(env, ast[1]) != nothing &&
isa(env_get(env, ast[1]), MalFunc) &&
# apply
ast = macroexpand(ast, env)
if !isa(ast, Array) return eval_ast(ast, env) end
+ if isempty(ast) return ast end
if :def! == ast[1]
return env_set(env, ast[2], EVAL(ast[3], env))