On Tue, Mar 09, 2010 at 10:12:32PM -0500 or thereabouts, Abram Hindle wrote:
Well if I use copy-seq I get this error from sbcl:
unhandled TYPE-ERROR in thread #<SB-THREAD:THREAD "initial thread" RUNNING {10026F2EC1}>: The value #2A((## ## ## ##) (## #\1 #\ ##) (## ## #\ ##) (## #\ #\ ##) (## #\2 ## ##) (## ## ## ##)) is not of type SEQUENCE.
Ya like I said in my last message that was my mistake. I meant to say vectors are sequences so can be copied with copy-seq. Arrays are not sequences.
(defun copy-array (array) ; (copy-seq array)) (let ((dims (array-dimensions array))) (adjust-array (make-array dims :displaced-to array) dims)))
Where as this does not.
Nice one though it might be a good idea to propagate the element type too so stuff like this doesn't happen:
* (make-array '(2 2) :element-type '(unsigned-byte 8))
#2A((0 0) (0 0))
* (copy-array *)
Error in function MAKE-ARRAY: One can't displace an array of type T into another of type (UNSIGNED-BYTE 8). [Condition of type SIMPLE-ERROR]
I think this is a bit better (but probably still isn't complete because of not copying fill pointers and whatnot):
(defun copy-array (array) (let ((dims (array-dimensions array))) (adjust-array (make-array dims :displaced-to array :element-type (array-element-type array)) dims)))