diff scripts/set/union.m @ 7344:4571f691b0ce

[project @ 2008-01-04 18:18:22 by jwe]
author jwe
date Fri, 04 Jan 2008 18:18:22 +0000
parents a1dbe9d80eee
children 83a8781b529d 746f13936eee
line wrap: on
line diff
--- a/scripts/set/union.m
+++ b/scripts/set/union.m
@@ -1,5 +1,5 @@
 ## Copyright (C) 1994, 1996, 1997, 1999, 2000, 2003, 2004, 2005, 2006,
-##               2007 John W. Eaton
+##               2007, 2008 John W. Eaton
 ##
 ## This file is part of Octave.
 ##
@@ -19,13 +19,26 @@
 
 ## -*- texinfo -*-
 ## @deftypefn {Function File} {} union (@var{x}, @var{y})
+## @deftypefnx{Function File} {} union (@var{x}, @var{y}, "rows")
 ## Return the set of elements that are in either of the sets @var{x} and
 ## @var{y}.  For example,
 ##
 ## @example
 ## @group
-## union ([ 1, 2, 4 ], [ 2, 3, 5 ])
-##      @result{} [ 1, 2, 3, 4, 5 ]
+## union ([1, 2, 4], [2, 3, 5])
+##      @result{} [1, 2, 3, 4, 5]
+## @end group
+## @end example
+##
+## If the optional third input argument is the string "rows" each row of
+## the matrices @var{x} and @var{y} will be considered an element of sets.
+## For example,
+## @example
+## @group
+## union([1, 2; 2, 3], [1, 2; 3, 4], "rows")
+##      @result{}  1   2
+##     2   3
+##     3   4
 ## @end group
 ## @end example
 ## @seealso{create_set, intersection, complement}
@@ -33,23 +46,31 @@
 
 ## Author: jwe
 
-function y = union(a,b)
+function y = union (a, b, varargin)
 
-  if (nargin != 2)
+  if (nargin < 2 || nargin > 3)
     print_usage ();
   endif
 
+  if (nargin == 3 && ! strcmpi (varargin{1}, "rows"))
+    error ("union: if a third input argument is present, it must be the string 'rows'");
+  endif
+
   if (isempty (a))
-    y = create_set (b);
+    y = create_set (b, varargin{:});
   elseif (isempty (b))
-    y = create_set (a);
-  else
+    y = create_set (a, varargin{:});
+  elseif (nargin == 2)
     y = create_set ([a(:); b(:)]);
     if (size (a, 1) == 1 || size (b, 1) == 1)
       y = y(:).';
     else
       y = y(:);
     endif
+  elseif (ndims (a) == 2 && ndims (b) == 2 && columns (a) == columns (b))
+    y = create_set ([a; b], "rows");
+  else
+    error ("union: input arguments must contain the same number of columns when \"rows\" is specified");
   endif
 
 endfunction