# HG changeset patch # User jwe # Date 1148055232 0 # Node ID f3e37beb03aa938430dac76856818a649edd68d7 # Parent 448f9982e7fbed1f40b1ee1afecf574159c0a62c [project @ 2006-05-19 16:13:52 by jwe] diff -r 448f9982e7fb -r f3e37beb03aa scripts/ChangeLog --- a/scripts/ChangeLog Fri May 19 06:53:31 2006 +0000 +++ b/scripts/ChangeLog Fri May 19 16:13:52 2006 +0000 @@ -1,7 +1,7 @@ 2006-05-19 David Bateman * polynomial/unmkpp.m, polynomial/mkpp.m, polynomial/spline.m, - polynomial/ppval.m: New files from Octave Forge. + polynomial/ppval.m, set/setxor.m: New files from Octave Forge. 2006-05-17 John W. Eaton diff -r 448f9982e7fb -r f3e37beb03aa scripts/set/setxor.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/set/setxor.m Fri May 19 16:13:52 2006 +0000 @@ -0,0 +1,57 @@ +## Copyright (C) 2000 Paul Kienzle +## +## This file is part of Octave. +## +## Octave is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. +## +## Octave is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with Octave; see the file COPYING. If not, write to the Free +## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. + +## -*- texinfo -*- +## @deftypefn {Function File} {} setxor (@var{a}, @var{b}) +## +## Return the elements exclusive to @var{a} or @var{b}, sorted in ascending +## order. If @var{a} and @var{b} are both column vectors return a column +## vector, otherwise return a row vector. +## +## @seealso{unique, union, intersect, setdiff, ismember} +## @end deftypefn + +function c = setxor (a, b) + if (nargin != 2) + usage ("setxor(a,b)"); + endif + + ## Form A and B into sets. + a = unique (a); + b = unique (b); + + if (isempty (a)) + c = b; + elseif (isempty (b)) + c = a; + else + ## Reject duplicates. + c = sort ([a(:); b(:)]); + n = length (c); + idx = find (c(1:n-1) == c(2:n)); + if (! isempty (idx)) + c([idx, idx+1]) = []; + endif + if (size (a, 1) == 1 || size (b, 1) == 1) + c = c.'; + endif + endif +endfunction + +%!assert(setxor([1,2,3],[2,3,4]),[1,4])