1 function step4_if_fn_do
(varargin), main
(varargin), end
4 function ret
= READ
(str
)
5 ret
= reader.read_str
(str
);
9 function ret
= eval_ast
(ast
, env
)
16 ret.append
(EVAL(ast.
get(i
), env
));
21 ret.append
(EVAL(ast.
get(i
), env
));
24 ret
= types.HashMap
();
28 ret.
set(EVAL(k
, env
), EVAL(ast.
get(k
), env
));
35 function ret
= EVAL(ast
, env
)
36 %fprintf('EVAL: %s\n', printer.pr_str(ast, true));
37 if ~type_utils.list_Q
(ast
)
38 ret
= eval_ast
(ast
, env
);
47 if isa(ast.
get(1),'types.Symbol')
48 a1sym
= ast.
get(1).name
;
54 ret
= env.
set(ast.
get(2), EVAL(ast.
get(3), env
));
57 for i
=1:2:length(ast.
get(2))
58 let_env.
set(ast.
get(2).
get(i
), EVAL(ast.
get(2).
get(i
+1), let_env
));
60 ret
= EVAL(ast.
get(3), let_env
);
62 el
= eval_ast
(ast.
slice(2), env
);
63 ret
= el.
get(length(el
));
65 cond = EVAL(ast.
get(2), env
);
66 if strcmp(class(cond), 'types.Nil') || ...
67 (islogical
(cond) && cond == false
)
69 ret
= EVAL(ast.
get(4), env
);
74 ret
= EVAL(ast.
get(3), env
);
77 ret
= @
(varargin) EVAL(ast.
get(3), Env
({env
}, ast.
get(2), ...
78 types.List
(varargin{:})));
80 el
= eval_ast
(ast
, env
);
82 args
= el.data
(2:end);
88 function ret
= PRINT(ast
)
89 ret
= printer.pr_str
(ast
, true
);
93 function ret
= rep
(str
, env
)
94 ret
= PRINT(EVAL(READ
(str
), env
));
100 % core.m: defined using matlab
101 ns
= core.ns
(); ks
= ns.keys
();
104 repl_env.
set(types.Symbol
(k
), ns
(k
));
107 % core.mal: defined using the langauge itself
108 rep
('(def! not (fn* (a) (if a false true)))', repl_env
);
110 %cleanObj = onCleanup(@() disp('*** here1 ***'));
113 line = input('user> ', 's');
117 if strcmp(strtrim
(line),''), continue
, end
119 fprintf('%s\n', rep
(line, repl_env
));
121 fprintf('Error: %s\n', err.message
);
122 type_utils.print_stack
(err
);