samer@38: % horzcat - function combinator, samer@38: % samer@38: % horzcat :: samer@38: % F:(A{1:N} => B{1:M}), samer@38: % G:(A{1:N} => C{1:L}), samer@38: % N:natural, ~'defaults to nargin(F)' samer@38: % M:natural ~'defaults to nargout(F)' samer@38: % -> (A{1:N} => B{1:M}, C{1:L}). 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