matlab: add step6
[jackhill/mal.git] / matlab / core.m
CommitLineData
d6624158
JM
1classdef core
2 methods(Static)
6d12affa
JM
3 function str = pr_str(varargin)
4 strs = cellfun(@(s) printer.pr_str(s,true), varargin, ...
5 'UniformOutput', false);
6 str = strjoin(strs, ' ');
7 end
8 function str = do_str(varargin)
9 strs = cellfun(@(s) printer.pr_str(s,false), varargin, ...
10 'UniformOutput', false);
11 str = strjoin(strs, '');
12 end
13 function ret = prn(varargin)
14 strs = cellfun(@(s) printer.pr_str(s,true), varargin, ...
15 'UniformOutput', false);
16 fprintf('%s\n', strjoin(strs, ' '));
17 ret = types.nil;
18 end
19 function ret = println(varargin)
20 strs = cellfun(@(s) printer.pr_str(s,false), varargin, ...
21 'UniformOutput', false);
22 fprintf('%s\n', strjoin(strs, ' '));
23 ret = types.nil;
24 end
25
d6624158
JM
26 function n = ns()
27 n = containers.Map();
6d12affa
JM
28 n('=') = @types.equal;
29
30 n('pr-str') = @core.pr_str;
31 n('str') = @core.do_str;
32 n('prn') = @core.prn;
33 n('println') = @core.println;
9831bce7
JM
34 n('read-string') = @reader.read_str;
35 n('slurp') = @fileread;
36
d6624158
JM
37 n('<') = @(a,b) a<b;
38 n('<=') = @(a,b) a<=b;
39 n('>') = @(a,b) a>b;
40 n('>=') = @(a,b) a>=b;
6d12affa
JM
41 n('+') = @(a,b) a+b;
42 n('-') = @(a,b) a-b;
43 n('*') = @(a,b) a*b;
44 n('/') = @(a,b) floor(a/b);
d6624158
JM
45
46 n('list') = @(varargin) varargin;
47 n('list?') = @iscell;
48 n('empty?') = @(a) length(a) == 0;
49 n('count') = @(a) length(a);
50 end
51 end
52end
53