From: Andrej V. <an...@us...> - 2007-01-03 09:35:44
|
Update of /cvsroot/maxima/maxima/share/algebra/solver In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv7905 Modified Files: misc.mac Log Message: Reimplement Setify, Union and Intersection so that they don't use functions from nset. This is needed because Solver expects that the order of elements in the list is not changed with this functions and functions from nset change the order of elements. Index: misc.mac =================================================================== RCS file: /cvsroot/maxima/maxima/share/algebra/solver/misc.mac,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- misc.mac 21 Apr 2006 00:45:57 -0000 1.2 +++ misc.mac 3 Jan 2007 09:35:41 -0000 1.3 @@ -63,13 +63,23 @@ /* Solver does not know maxima sets - workarounds for set functions. */ /******************************************************************************/ -Setify(lst) := listify(setify(lst))$ +Setify(lst) := + if length(lst)=0 then [] + else append([lst[1]], Setify(delete(lst[1], lst)))$ DisjointP(l1, l2) := disjointp(setify(l1), setify(l2))$ -Intersection(l1, l2) := listify(intersection(setify(l1), setify(l2)))$ +Intersection(l1, l2) := + if length(l1)=0 then [] + else if member(l1[1], l2) then append([l1[1]], Intersection(rest(l1), l2)) + else Intersection(rest(l1), l2)$ SetDifference(l1, l2) := listify(setdifference(setify(l1), setify(l2)))$ -Union([l]) := listify(lreduce(union, map(setify, l)))$ +Union([l]) := lreduce(Union2, l)$ + +Union2(l1, l2) := + if length(l2)=0 then l1 + else if not(member(l2[1], l1)) then Union2(append(l1, [l2[1]]), rest(l2)) + else Union2(l1, rest(l2))$ |