comparison general/funutils/@function_handle/table.m @ 38:9d24b616bb06

Added function algebra.
author samer
date Tue, 29 Jan 2013 15:59:01 +0000
parents
children ae596261e75f
comparison
equal deleted inserted replaced
37:beb8a3f4a345 38:9d24b616bb06
1 function [g,s,l,seq]=table(f,varargin)
2 opts=options('nargin',nargin(f),'nargout',nargout(f),'file',[],varargin{:});
3 nin=opts.nargin;
4 nout=opts.nargout;
5
6 Table=cell(0,nin+nout);
7
8 g=@lookup;
9 s=@saver;
10 l=@loader;
11 seq=@getrows;
12
13 function s=getrows, s=slices(Table,1); end
14 function saver(file),
15 if nargin<1, file=opts.file; end
16 fprintf('saving %d tabled rows of %s to %s\n',size(Table,1),tostring(f),file);
17 d.table=Table;
18 save(file,'-struct','d');
19 end
20 function loader(file),
21 if nargin<1, file=opts.file; end
22 d=load(file);
23 Table=d.table;
24 fprintf('loading %d tabled rows of %s from %s\n',size(Table,1),tostring(f),file);
25 end
26
27 function varargout=lookup(varargin)
28 matches=select(@(r)isequal(varargin,r(1:nin)),slices(Table,1));
29 if isempty(matches)
30 [varargout{1:nout}]=f(varargin{:});
31 Table=vertcat(Table,[varargin,varargout]);
32 else
33 varargout=col(head(matches),nin+(1:nout));
34 end
35 end
36 end
37
38
39