samer@38: % vercat - function combinator, f&g (...) = f(...); return g(...) samer@38: % samer@38: % and :: samer@38: % (A{:} => B{:}), samer@38: % (A{:} => C{:}) samer@38: % -> (A{:} => C{:}). samer@38: % samer@38: % and :: samer@38: % (A{1:N} => B{:}), samer@38: % (A{1:N} => C{1:M}), samer@38: % N:natural, samer@38: % M:natural samer@38: % -> (A{1:N} => C{1:M}). samer@38: function h=vercat(varargin) samer@38: g=varargin{end}; samer@38: N=length(varargin)-1; samer@38: fx=varargin(1:N); samer@38: fns = { @q11, @q1n; @qn1, @qnn }; samer@38: h=fns{acount(nargin(g),1),acount(nargout(g),1)}; samer@38: function y=q11(x), callfx1(x); y=g(x); end samer@38: function y=qn1(varargin), callfxn(varargin); y=g(varargin{:}); end samer@38: function varargout=q1n(x), callfx1(x); [varargout{1:nargout}]=g(x); end samer@38: function varargout=qnn(varargin), callfxn(varargin); [varargout{1:nargout}]=g(varargin{:}); end samer@38: samer@38: function callfx1(x), for i=1:N, fx{i}(x); end; end samer@38: function callfxn(args), for i=1:N, fx{i}(args{:}); end; end samer@38: end