

The result can be computed by performing a modified 1-dimensional Raze several times. In this case, the shape of ⊃ X is + /¨ S. , / S, where S is a vector containing ≢⍴ X vectors followed by any number of scalars. The elements can be merged without adding fills when the length of an element along a particular axis depends only on its position along that axis in the outer array. The axes of a high-rank argument should be paired with those of its element arrays, starting at the first axis (much like prefix agreement).
/cdn.vox-cdn.com/uploads/chorus_image/image/66644828/raze.0.png)
This extension is part of BQN, but has not been implemented in any APL, and would not be backwards-compatible in J, since J's Raze implicitly ravels its argument. Raze can be extended to an argument array of rank greater than 1, allowing it to merge block matrices or higher-dimensional structures. It is also an inverse to partition functions which partition major cells along the first axis, although few partition functions do this. Raze is the inverse of Partition and Partitioned Enclose on vectors: partitioning, then razing, a vector gives that vector back. This is because Raze treats scalar elements of its argument as singleton vectors, a convention which may be viewed as scalar rank extension or as a result of the idea that a scalar's only major cell is itself. The definition differs if X is a singleton vector with scalar elements, because the Raze of X will be a vector while the reduction implementation results in a scalar (or, in NARS2000, a DOMAIN ERROR). If X is a vector whose elements have equal and positive rank, then ↑⍪ / X is the Raze of X. Raze is similar to the Catenate reduction ↑⍪ /.
