The following works in sbcl+grid:

(copy-to (make-array 2 :element-type 'double-float :initial-contents
'(1.0d0 2.0d0)) 'grid:foreign-array)

But it does not work in clisp+grid.

The root cause lies in the function grid/array.lisp/element-type.  It uses
`(array-element-type grid)'.

But this can present a problem.  Quoting hyperspec:

(Because of *array* <26_glo_a.htm#array> *upgrading*, this *type
specifier*<26_glo_t.htm#type_specifier>can in some cases denote a
*supertype* <26_glo_s.htm#supertype> of the *expressed array element
type*<26_glo_e.htm#expressed_array_element_type>of the
*array*.)

In CLISP, array-element-type returns `T' when passed #(1d0 2d0)

It returns T even when passed a simple array:

(array-element-type (make-array 2 :element-type 'double-float
:initial-contents
                      '(1.0d0 2.0d0)
                      :adjustable nil
                      :fill-pointer nil
                      :displaced-to nil) )

The proposed fix is

(defmethod element-type ((grid array))
  (type-of (row-major-aref grid 0))
  #+skip(array-element-type grid))

Now copy-to works in clisp as well.

Mirko
_______________________________________________
GSLL-devel mailing list
GSLL-devel@common-lisp.net
http://lists.common-lisp.net/cgi-bin/mailman/listinfo/gsll-devel

Reply via email to