Accessors — Reading and writing array elements


cl_object ecl_aref( cl_object array, cl_index row_major_index);

cl_object ecl_aset( cl_object array, cl_index row_major_index, cl_object new_value);

cl_object ecl_aref1( cl_object vector, cl_index row_major_index);

cl_object ecl_aset1( cl_object vector, cl_index row_major_index, cl_object new_value);


ecl_aref accesses an array using the supplied row_major_index, checking the array bounds and returning a Lisp object for the value at that position. ecl_aset does the converse, storing a Lisp value at the given row_major_index.

The first argument to ecl_aref or ecl_aset is an array of any number of dimensions. For an array of rank N and dimensions d1, d2 ... up to dN, the row major index associated to the indices (i1,i2,...iN) is computed using the formula i1+d1*(i2+d3*(i3+...)).

ecl_aref1 and ecl_aset1 are specialized versions that only work with one-dimensional arrays or vectors. They verify that the first argument is indeed a vector.

All functions above check that the index does not exceed the array bounds, that the values match the array element type and that the argument is an array (or a vector). If these conditions are not met, a type error is signaled.