diff general/funutils/@function_handle/vertcat.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/vertcat.m	Tue Jan 29 15:59:01 2013 +0000
@@ -0,0 +1,27 @@
+% vercat - function combinator, f&g (...) = f(...); return g(...)
+%
+% and ::
+%    (A{:} => B{:}),
+%    (A{:} => C{:})
+% -> (A{:} => C{:}).
+%
+% and ::
+%    (A{1:N} => B{:}),
+%    (A{1:N} => C{1:M}),
+%    N:natural,
+%    M:natural
+% -> (A{1:N} => C{1:M}).
+function h=vercat(varargin)
+	g=varargin{end};
+	N=length(varargin)-1;
+	fx=varargin(1:N);
+	fns = { @q11, @q1n; @qn1, @qnn };
+	h=fns{acount(nargin(g),1),acount(nargout(g),1)};
+	function y=q11(x), callfx1(x); y=g(x); end
+	function y=qn1(varargin), callfxn(varargin); y=g(varargin{:}); end
+	function varargout=q1n(x), callfx1(x); [varargout{1:nargout}]=g(x); end
+	function varargout=qnn(varargin), callfxn(varargin); [varargout{1:nargout}]=g(varargin{:}); end
+
+	function callfx1(x), for i=1:N, fx{i}(x); end; end
+	function callfxn(args), for i=1:N, fx{i}(args{:}); end; end
+end