samer@38: % or - function combinator, f|g (...) = f(...), g(...) samer@38: % samer@38: % or :: 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@39: function h=or(f,g,nin,nout) samer@38: if nargin<4, nout=nargout(f); end samer@38: if nargin<3, nin=nargin(f); end samer@39: noutg=nargout(g); samer@38: fns = { @q11, @q1n; @qn1, @qnn }; samer@38: h=fns{acount(nin,1),max(acount(nargout(g),1),acount(nout,1))}; samer@38: samer@38: function [y,z]=q11(x), y=f(x); z=g(x); end samer@38: function [y,z]=qn1(varargin), y=f(varargin{:}); z=g(varargin{:}); end samer@38: function varargout=q1n(x), [varargout{1:nout}]=f(x); [varargout{nout+1:nargout}]=g(x); end samer@38: function varargout=qnn(varargin), samer@39: [varargout{1:nout}]=f(varargin{:}); samer@39: [varargout{nout+(1:noutg)}]=g(varargin{:}); samer@38: end samer@38: end