view general/funutils/@function_handle/and.m @ 42:ae596261e75f

Various fixes and development to audio handling
author samer
date Tue, 02 Dec 2014 14:51:13 +0000
parents c388f1c70669
children
line wrap: on
line source
% and - sequential call function combinator
%
% and ::
%    (A{:} => B{:}),
%    (A{:} => C{:})
% -> (A{:} => C{:}).
%
% and ::
%    (A{:} => B{:}),
%    (A{:} => C{:}),
%    N:natural,
%    M:natural
% -> (A{1:N} => C{1:M}).
%
% f&g == and(f,g) is a function which first calls f with given arguments,
% discarding return values, then calls g with arguments returning result.
function h=and(f,g,nin,nout)
	if nargin<4, nout=nargout(g); end
	if nargin<3, nin=nargin(g); end
	fns = { @q11, @q1n; @qn1, @qnn };
	h=fns{acount(nin,1,1),acount(nout,1,1)};
	function y=q11(x), f(x); y=g(x); end
	function y=qn1(varargin), f(varargin{:}); y=g(varargin{:}); end
	function varargout=q1n(x), f(x); [varargout{1:nargout}]=g(x); end
	function varargout=qnn(varargin), f(varargin{:}); [varargout{1:nargout}]=g(varargin{:}); end
end