4 READ
:= method(str
, MalReader
read_str(str
))
6 eval_ast
:= method(ast
, env
,
8 "MalSymbol", env
at(ast val
) ifNil(Exception raise("'" .. (ast val
) "' not found")),
9 "MalList", MalList
with(ast
map(a
, EVAL(a
, env
))),
10 "MalVector", MalVector
with(ast
map(a
, EVAL(a
, env
))),
14 keyObj
:= MalMap
keyToObj(k
)
15 m
atPut(MalMap
objToKey(EVAL(keyObj
, env
)), EVAL(v
, env
))
22 EVAL
:= method(ast
, env
,
23 if(ast
type != "MalList", return(eval_ast(ast
, env
)))
24 if(ast isEmpty
, return ast
)
25 el
:= eval_ast(ast
, env
)
28 f
callWithArgList(args
)
31 PRINT
:= method(exp
, exp
malPrint(true
))
34 "+", block(a
, b
, a
+ b
),
35 "-", block(a
, b
, a
- b
),
36 "*", block(a
, b
, a
* b
),
37 "/", block(a
, b
, a
/ b
)
40 RE
:= method(str
, EVAL(READ(str
), repl_env
))
42 REP
:= method(str
, PRINT(RE(str
)))
45 line
:= MalReadline
readLine("user> ")
47 if(line isEmpty
, continue)
48 e
:= try(REP(line
) println
)
50 ("Error: " .. (e error
)) println