3 function ret
= throw
(obj
)
5 throw
(types.MalException
(obj
));
8 function str
= pr_str
(varargin)
9 strs
= cellfun
(@
(s
) printer.pr_str
(s
,true
), varargin, ...
10 'UniformOutput', false
);
11 str
= strjoin
(strs
, ' ');
13 function str
= do_str
(varargin)
14 strs
= cellfun
(@
(s
) printer.pr_str
(s
,false
), varargin, ...
15 'UniformOutput', false
);
16 str
= strjoin
(strs
, '');
18 function ret
= prn
(varargin)
19 strs
= cellfun
(@
(s
) printer.pr_str
(s
,true
), varargin, ...
20 'UniformOutput', false
);
21 fprintf('%s\n', strjoin
(strs
, ' '));
24 function ret
= println
(varargin)
25 strs
= cellfun
(@
(s
) printer.pr_str
(s
,false
), varargin, ...
26 'UniformOutput', false
);
27 fprintf('%s\n', strjoin
(strs
, ' '));
31 function ret
= time_ms
()
32 secs
= now
-repmat
(datenum
('1970-1-1 00:00:00'),size(now
));
33 ret
= floor(secs.
*repmat
(24*3600.0*1000,size(now
)));
36 function new_hm
= assoc
(hm
, varargin)
38 for i
=1:2:length(varargin)
39 new_hm.
set(varargin{i
}, varargin{i
+1});
43 function new_hm
= dissoc
(hm
, varargin)
45 ks
= intersect
(hm.keys
(),varargin);
46 remove
(new_hm.data
, ks
);
49 function ret
= get(hm
, key
)
61 function ret
= keys
(hm
)
63 ret
= types.List
(ks
{:});
66 function ret
= vals
(hm
)
68 ret
= types.List
(vs
{:});
71 function ret
= cons
(a
, seq
)
72 cella
= [{a
}, seq.data
];
73 ret
= types.List
(cella
{:});
76 function ret
= concat
(varargin)
80 cells
= cellfun
(@
(x
) x.data
, varargin, ...
81 'UniformOutput', false
);
82 cella
= cat
(2,cells
{:});
84 ret
= types.List
(cella
{:});
87 function ret
= first
(seq
)
95 function ret
= rest
(seq
)
96 cella
= seq.data
(2:end);
97 ret
= types.List
(cella
{:});
100 function ret
= nth
(seq
, idx
)
101 if idx
+1 > length(seq
)
102 throw
(MException
('Range:nth', ...
103 'nth: index out of range'))
105 ret
= seq.
get(idx
+1);
108 function ret
= apply
(varargin)
110 if isa(f
, 'types.Function')
113 first_args
= varargin(2:end-1);
114 rest_args
= varargin{end}.data
;
115 args
= [first_args rest_args
];
119 function ret
= map
(f
, lst
)
120 if isa(f
, 'types.Function')
123 cells
= cellfun
(@
(x
) f
(x
), lst.data
, 'UniformOutput', false
);
124 ret
= types.List
(cells
{:});
127 function new_obj
= with_meta
(obj
, meta)
128 new_obj
= clone
(obj
);
132 function meta = meta(obj
)
134 case {'types.List', 'types.Vector',
135 'types.HashMap', 'types.Function'}
142 function ret
= reset_BANG
(atm
, val
)
147 function ret
= swap_BANG
(atm
, f
, varargin)
148 args
= [{atm.val
} varargin];
149 if isa(f
, 'types.Function')
152 atm.val
= f
(args
{:});
157 n
= containers.Map
();
158 n
('=') = @types.equal
;
159 n
('throw') = @core.throw
;
160 n
('nil?') = @
(a
) isa(a
, 'types.Nil');
161 n
('true?') = @
(a
) isa(a
, 'logical') && a
== true
;
162 n
('false?') = @
(a
) isa(a
, 'logical') && a
== false
;
163 n
('symbol') = @
(a
) types.Symbol
(a
);
164 n
('symbol?') = @
(a
) isa(a
, 'types.Symbol');
165 n
('keyword') = @types.keyword
;
166 n
('keyword?') = @types.keyword_Q
;
168 n
('pr-str') = @core.pr_str
;
169 n
('str') = @core.do_str
;
170 n
('prn') = @core.prn
;
171 n
('println') = @core.println
;
172 n
('read-string') = @reader.read_str
;
173 n
('readline') = @
(p
) input(p
, 's');
174 n
('slurp') = @fileread
;
177 n
('<=') = @
(a
,b
) a
<=b
;
179 n
('>=') = @
(a
,b
) a
>=b
;
183 n
('/') = @
(a
,b
) floor(a
/b
);
184 n
('time-ms') = @core.time_ms
;
186 n
('list') = @
(varargin) types.List
(varargin{:});
187 n
('list?') = @types.list_Q
;
188 n
('vector') = @
(varargin) types.Vector
(varargin{:});
189 n
('vector?') = @types.vector_Q
;
190 n
('hash-map') = @
(varargin) types.HashMap
(varargin{:});
191 n
('map?') = @types.hash_map_Q
;
192 n
('assoc') = @core.assoc
;
193 n
('dissoc') = @core.dissoc
;
194 n
('get') = @core.
get;
195 n
('contains?') = @
(a
,b
) a.data.isKey
(b
);
196 n
('keys') = @core.keys
;
197 n
('vals') = @core.vals
;
199 n
('sequential?') = @types.sequential_Q
;
200 n
('cons') = @core.cons
;
201 n
('concat') = @core.concat
;
202 n
('nth') = @core.nth
;
203 n
('first') = @core.first
;
204 n
('rest') = @core.rest
;
205 n
('empty?') = @
(a
) length(a
) == 0;
206 n
('count') = @
(a
) length(a
);
207 n
('apply') = @core.apply
;
208 n
('map') = @core.map
;
209 n
('conj') = @
(x
) disp('not implemented yet');
211 n
('with-meta') = @core.with_meta
;
212 n
('meta') = @core.
meta;
213 n
('atom') = @types.Atom
;
214 n
('atom?') = @
(a
) isa(a
, 'types.Atom');
215 n
('deref') = @
(a
) a.val
;
216 n
('reset!') = @core.reset_BANG
;
217 n
('swap!') = @core.swap_BANG
;