[toronto-lisp] March meeting minutes.
Vishvajit Singh
vishvajitsingh at gmail.com
Thu Mar 11 05:45:52 UTC 2010
I found a (supposedly) complete version.. it's really a terrifying
thing to behold..
http://www.cliki.net/SHALLOW-COPY-ARRAY
Preserves fill-pointer, element-type, adjustable-p, and displacement..
-vish
On Wed, Mar 10, 2010 at 10:31 PM, <doug at hcsw.org> wrote:
> 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)))
>
> _______________________________________________
> toronto-lisp mailing list
> toronto-lisp at common-lisp.net
> http://common-lisp.net/cgi-bin/mailman/listinfo/toronto-lisp
>
More information about the toronto-lisp
mailing list