From: Viktor T. <vt...@us...> - 2008-11-20 22:55:06
|
Update of /cvsroot/maxima/maxima/src In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv22974 Modified Files: simp.lisp Log Message: Changes by Volker van Nek to improve handling of lists. Index: simp.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/simp.lisp,v retrieving revision 1.60 retrieving revision 1.61 diff -u -d -r1.60 -r1.61 --- simp.lisp 17 Nov 2008 12:55:41 -0000 1.60 +++ simp.lisp 20 Nov 2008 22:54:59 -0000 1.61 @@ -202,6 +202,10 @@ (and (not (atom x)) (not (atom (car x))) (member (caar x) '(rat bigfloat))))) +(defmfun mlistp (x) ;; VTT + (and (not (atom x)) ;; VTT + (eq (caar x) 'mlist))) ;; VTT + ;; EVEN works for any arbitrary lisp object since it does an integer ;; check first. In other cases, you may want the Lisp EVENP function ;; which only works for integers. @@ -787,7 +791,15 @@ del (cond ((not (mtimesp (cadr fm))) (go check)) ((onep1 (cadadr fm)) (rplacd (cadr fm) (cddadr fm)) (return (cdr fm))) - ((not (zerop1 (cadadr fm))) (return (cdr fm)))) + ((not (zerop1 (cadadr fm))) (return (cdr fm))) ;; VTT ) + ((and (not $listarith) ;; VTT + (zerop1 (cadadr fm)) ;; VTT + (mlistp (caddr (cadr fm))) ) ;; VTT +;; (eq 'mlist (caar (caddr (cadr fm)))) ) ;; VTT + (return ;; VTT + (rplacd fm ;; VTT + (list (constmx 0 (caddr (cadr fm)))) ))) ) ;; VTT + (return (rplacd fm (cddr fm))) equt (setq x1 (testtneg (list* '(mtimes simp) (addk (cond (flag (cadadr fm)) @@ -993,7 +1005,7 @@ (mul2 res (cadr eqnflag)) (mul2 res (caddr eqnflag))))) (t (dolist (u x) - (cond ((mxorlistp1 u) + (cond ( (mxorlistp u) ;;; VTT - (mxorlistp1 u) (return (setq res (constmx res u)))) ((and (mexptp u) |