samer@38: % horzcat - function combinator, samer@38: % samer@38: % horzcat :: samer@39: % (A{1:N} => B{1}{:}), samer@39: % (A{1:N} => B{2}{:}), samer@39: % ... samer@39: % -> (A{1:N} => B{1}{:}, B{2}{:}, ...). samer@39: % samer@39: % [f,g,h,...] is the function which calls f,g,h etc in order samer@39: % with given arguments and returns all their values as multiple samer@39: % return values. samer@39: % eg, [a,b,c]=feval([@zeros,@ones,@eye],2) samer@39: % Returns a=[0,0;0,0], b=[1,1;1,1], c=[1,0;0,1]. samer@39: samer@38: function h=horzcat(varargin) samer@38: funs=varargin; samer@38: nouts=cell2mat(map(@nargout,varargin)); samer@38: NN=sum(nouts); N=length(funs); samer@38: fns = { @q1n; @qnn }; samer@38: h=fns{acount(nargin(funs{1}),1)}; samer@38: samer@38: function varargout=q1n(x), samer@38: varargout=cell(1,NN); samer@38: j=0; for i=1:N samer@38: k=j+nouts(i); samer@38: [varargout{j+1:k}]=funs{i}(x); samer@38: j=k; samer@38: end samer@38: end samer@38: function varargout=qnn(varargin), samer@38: varargout=cell(1,NN); samer@38: j=0; for i=1:N samer@38: k=j+nouts(i); samer@38: [varargout{j+1:k}]=funs{i}(varargin{:}); samer@38: j=k; samer@38: end samer@38: end samer@38: end