samer@39: % and - sequential call function combinator samer@38: % samer@38: % and :: samer@38: % (A{:} => B{:}), samer@38: % (A{:} => C{:}) samer@38: % -> (A{:} => C{:}). samer@38: % samer@38: % and :: samer@39: % (A{:} => B{:}), samer@39: % (A{:} => C{:}), samer@38: % N:natural, samer@38: % M:natural samer@38: % -> (A{1:N} => C{1:M}). samer@39: % samer@39: % f&g == and(f,g) is a function which first calls f with given arguments, samer@39: % discarding return values, then calls g with arguments returning result. samer@38: function h=and(f,g,nin,nout) samer@38: if nargin<4, nout=nargout(g); end samer@38: if nargin<3, nin=nargin(g); end samer@38: fns = { @q11, @q1n; @qn1, @qnn }; samer@42: h=fns{acount(nin,1,1),acount(nout,1,1)}; samer@38: function y=q11(x), f(x); y=g(x); end samer@38: function y=qn1(varargin), f(varargin{:}); y=g(varargin{:}); end samer@38: function varargout=q1n(x), f(x); [varargout{1:nargout}]=g(x); end samer@38: function varargout=qnn(varargin), f(varargin{:}); [varargout{1:nargout}]=g(varargin{:}); end samer@38: end