I am converting some of my code to use grid.
The following is on clisp & cygwin (my sbcl & linux is behind a firewall, so it takes a bit for me to transfer stuff to them)
It seems that while `transpose' can handle both arrays and marrays, diagonal can handle only arrays. I traced the execution to `make-specification' in specification.lisp: SYSTEM::LIST-ACCESS: NIL is not a pair.
GSL> #m(1 2 3 ^ 4 5 6 ^ 7 8 9)
#<MATRIX-DOUBLE-FLOAT #2A((1.0d0 2.0d0 3.0d0) (4.0d0 5.0d0 6.0d0) (7.0d0 8.0d0 9.0d0))>
GSL> (grid:transpose #m(1 2 3 ^ 4 5 6 ^ 7 8 9))
#<MATRIX-DOUBLE-FLOAT #2A((1.0d0 4.0d0 7.0d0) (2.0d0 5.0d0 8.0d0) (3.0d0 6.0d0 9.0d0))>
GSL> (grid:diagonal #m(1 2 3 ^ 4 5 6 ^ 7 8 9))
; Evaluation aborted.
GSL> (grid:transpose (cl-array #m(1 2 3 ^ 4 5 6 ^ 7 8 9)))
#2A((1.0d0 4.0d0 7.0d0) (2.0d0 5.0d0 8.0d0) (3.0d0 6.0d0 9.0d0))
GSL> (grid:diagonal (cl-array #m(1 2 3 ^ 4 5 6 ^ 7 8 9)))
#(1.0d0 5.0d0 9.0d0)
GSL>
FWIW, in the test suite (tests/compose.lisp), the diagonal tests are on arrays, and not marrays.
Thanks,
Mirko