changeset 98282:fe3feb2e202d

(calcFunc-venum): Properly handle intervals.
author Jay Belanger <jay.p.belanger@gmail.com>
date Sat, 20 Sep 2008 22:07:17 +0000
parents b65be0dea2c2
children e38f9f28d6ce
files lisp/calc/calc-vec.el
diffstat 1 files changed, 18 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/calc/calc-vec.el	Sat Sep 20 21:55:04 2008 +0000
+++ b/lisp/calc/calc-vec.el	Sat Sep 20 22:07:17 2008 +0000
@@ -1294,18 +1294,24 @@
 (defun calcFunc-venum (a)
   (setq a (calcFunc-vfloor a t))
   (or (math-constp a) (math-reject-arg a "*Set must be finite"))
-  (let ((p a) next)
-    (while (cdr p)
-      (setq next (cdr p))
-      (if (eq (car-safe (nth 1 p)) 'intv)
-	  (setcdr p (nconc (cdr (calcFunc-index (math-add
-						 (math-sub (nth 3 (nth 1 p))
-							   (nth 2 (nth 1 p)))
-						 1)
-						(nth 2 (nth 1 p))))
-			   (cdr (cdr p)))))
-      (setq p next))
-    a))
+  (let* ((prev a) (this (cdr prev)) this-val next this-last)
+    (while this
+      (setq next (cdr this)
+			this-val (car this))
+      (if (eq (car-safe this-val) 'intv)
+		  (progn
+			(setq this (cdr (calcFunc-index (math-add
+											 (math-sub (nth 3 this-val)
+													   (nth 2 this-val))
+											 1)
+											(nth 2 this-val))))
+			(setq this-last (last this))
+			(setcdr this-last next)
+			(setcdr prev this)
+			(setq prev this-last))
+		(setq prev this))
+	  (setq this next)))
+  a)
 
 (defun calcFunc-vpack (a)
   (setq a (calcFunc-vfloor a t))