Add functions relating to multidimensional array indexing conversions
Similar functions are provided in CL, but they operate on arrays when all they really need are the dimensions. This sometimes proves an annoyance, and I thought I'd submit the more general functions here. The behavior should exactly mimic that of the CL counterparts, except that the error which array-in-bounds-p
signals is implementation-dependent and dim-in-bounds-p
always signals a SIMPLE-ERROR
.
This PR implements associated tests as well.
EDIT: I have also implemented a function to convert a row-major index to axis indices based on a given set of dimensions, and have implemented a test for that as well
I wanted to further propose extending these functions to cases when fewer indices than the rank of the array are given, ie something like
(defvar a #2A((a b c) (d e f))
(row-major-index (array-dimensions a) 0 0) ;; 0
(row-major-index (array-dimensions a) 0) ;; 0 . Currently an error
(row-major-index (array-dimensions a) 1) ;; 3 . Also currently an error
(dim-in-bounds-p '(4 3 2 1) 0) ;; t . Currently an error
This behavior (unimplemented, to be clear) diverges more from the spec, but I often find it useful when working with multi-dimensional arrays. I can update the PR if we decide to support it.