From: Nicolas N. <Nic...@iw...> - 2003-02-28 15:38:27
|
Hello, at the moment matlisp can't handle 0x0-, nx0- or 0xn-matrices. This is annoying because these may arise in some border situations (of course, without elements being referenced). Below is a patch which should make this possible (it corrects also a remaining :type 'fixnum). Sourceforge CVS was partially down, so I diffed against a local file for print.lisp (which should be same as CVS, though). Yours, Nicolas. neuss@ortler:~/CL-HOME/matlisp/src$ cvs diff -u matrix.lisp Index: matrix.lisp =================================================================== RCS file: /cvsroot/matlisp/matlisp/src/matrix.lisp,v retrieving revision 1.11 diff -u -r1.11 matrix.lisp --- matrix.lisp 19 Feb 2003 21:59:52 -0000 1.11 +++ matrix.lisp 28 Feb 2003 15:20:19 -0000 @@ -256,7 +256,7 @@ :initarg :store-size :initform 0 :accessor store-size - :type 'fixnum + :type fixnum :documentation "Total number of elements needed to store the matrix. (Usually the same as nels, but not necessarily so!") (store @@ -665,7 +665,7 @@ (let ((arg (first args))) (typecase arg (integer - (assert (plusp arg) nil + (assert (not (minusp arg)) nil "matrix dimension must be positive, not ~A" arg) (make-real-matrix-dim arg arg)) (sequence @@ -676,8 +676,8 @@ (2 (destructuring-bind (n m) args - (assert (and (typep n '(integer 1)) - (typep n '(integer 1))) + (assert (and (typep n '(integer 0)) + (typep n '(integer 0))) nil "cannot make a ~A x ~A matrix" n m) (make-real-matrix-dim n m))) @@ -850,8 +850,8 @@ (let ((arg (first args))) (typecase arg (integer - (assert (plusp arg) nil - "matrix dimension must be positive, not ~A" arg) + (assert (not (minusp arg)) nil + "matrix dimension must be non-negative, not ~A" arg) (make-complex-matrix-dim arg arg)) (sequence (make-complex-matrix-sequence arg)) @@ -861,8 +861,8 @@ (2 (destructuring-bind (n m) args - (assert (and (typep n '(integer 1)) - (typep n '(integer 1))) + (assert (and (typep n '(integer 0)) + (typep n '(integer 0))) nil "cannot make a ~A x ~A matrix" n m) (make-complex-matrix-dim n m))) neuss@ortler:~/CL-HOME/matlisp/src$ diff -u print.lisp print.lisp.~1.7~ --- print.lisp Fri Feb 28 16:30:46 2003 +++ print.lisp.~1.7~ Fri Feb 28 16:32:20 2003 @@ -154,35 +154,36 @@ (dotimes (i *matrix-indent*) (format stream " ")) (dotimes (j max-m) + (declare (type fixnum j)) (print-element matrix (matrix-ref matrix i j) stream) (format stream " ")) - (when (plusp number-of-cols) - (if (< max-m (1- number-of-cols)) + (if (< max-m (1- number-of-cols)) + (progn + (format stream "... ") + (print-element matrix + (matrix-ref matrix i (1- number-of-cols)) + stream) + (format stream " ")) + (if (< max-m number-of-cols) (progn - (format stream "... ") (print-element matrix (matrix-ref matrix i (1- number-of-cols)) stream) - (format stream " ")) - (if (< max-m number-of-cols) - (progn - (print-element matrix - (matrix-ref matrix i (1- number-of-cols)) - stream) - (format stream " "))))))) + (format stream " ")))))) (dotimes (i max-n) + (declare (type fixnum i)) (print-row i)) + + (if (< max-n (1- number-of-rows)) + (progn + (format stream "~% :") + (print-row (1- number-of-rows))) + (if (< max-n number-of-rows) + (print-row (1- number-of-rows)))))))) - (when (plusp number-of-rows) - (if (< max-n (1- number-of-rows)) - (progn - (format stream "~% :") - (print-row (1- number-of-rows))) - (if (< max-n number-of-rows) - (print-row (1- number-of-rows))))))))) (defmethod print-object ((matrix standard-matrix) stream) (print-unreadable-object (matrix stream :type t :identity (not *print-matrix*)) |