diff general/funutils/@function_handle/or.m @ 38:9d24b616bb06

Added function algebra.
author samer
date Tue, 29 Jan 2013 15:59:01 +0000
parents
children c388f1c70669
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/general/funutils/@function_handle/or.m	Tue Jan 29 15:59:01 2013 +0000
@@ -0,0 +1,22 @@
+% or - function combinator, f|g (...) = f(...), g(...)
+%
+% or ::
+%    F:(A{1:N} => B{1:M}),
+%    G:(A{1:N} => C{1:L}),
+%    N:natural,              ~'defaults to nargin(F)'
+%    M:natural               ~'defaults to nargout(F)'
+% -> (A{1:N} => B{1:M}, C{1:L}).
+function h=and(f,g,nin,nout)
+	if nargin<4, nout=nargout(f); end
+	if nargin<3, nin=nargin(f); end
+	fns = { @q11, @q1n; @qn1, @qnn };
+	h=fns{acount(nin,1),max(acount(nargout(g),1),acount(nout,1))};
+
+	function [y,z]=q11(x), y=f(x); z=g(x); end
+	function [y,z]=qn1(varargin), y=f(varargin{:}); z=g(varargin{:}); end
+	function varargout=q1n(x), [varargout{1:nout}]=f(x); [varargout{nout+1:nargout}]=g(x); end
+	function varargout=qnn(varargin), 
+		[varargin{1:nout}]=f(varargin{:}); 
+		[varargout{1:nargout}]=g(varargin{:}); 
+	end
+end