Mercurial > hg > ishara
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/general/funutils/@function_handle/table.m Tue Jan 29 15:59:01 2013 +0000 @@ -0,0 +1,39 @@ +function [g,s,l,seq]=table(f,varargin) + opts=options('nargin',nargin(f),'nargout',nargout(f),'file',[],varargin{:}); + nin=opts.nargin; + nout=opts.nargout; + + Table=cell(0,nin+nout); + + g=@lookup; + s=@saver; + l=@loader; + seq=@getrows; + + function s=getrows, s=slices(Table,1); end + function saver(file), + if nargin<1, file=opts.file; end + fprintf('saving %d tabled rows of %s to %s\n',size(Table,1),tostring(f),file); + d.table=Table; + save(file,'-struct','d'); + end + function loader(file), + if nargin<1, file=opts.file; end + d=load(file); + Table=d.table; + fprintf('loading %d tabled rows of %s from %s\n',size(Table,1),tostring(f),file); + end + + function varargout=lookup(varargin) + matches=select(@(r)isequal(varargin,r(1:nin)),slices(Table,1)); + if isempty(matches) + [varargout{1:nout}]=f(varargin{:}); + Table=vertcat(Table,[varargin,varargout]); + else + varargout=col(head(matches),nin+(1:nout)); + end + end +end + + +