Ravel
,

Ravel (,
) is a primitive function introduced in APL\360 which returns the ravel of an array. In the APL array model, an array's ravel is the vector containing all its elements in ravel order. It is equivalent to reshaping an array using its bound for the new shape. Reshaping the ravel using the original array's shape restores that array.
In some APLs an axis may be specified for Ravel in order to combine only some axes of an array, or insert a length1 axis.
The name "ravel" references the process of undoing woven or knitted fabric, thus removing its structure and rendering it linear.
Contents
Examples
You can use ravel to squash a matrix down to one dimension. The elements are listed in reading order—left to right, top to bottom.
⊢x ← 3 4⍴⍳12 ⍝ A matrix
1 2 3 4
5 6 7 8
9 10 11 12
,x ⍝ Its ravel
1 2 3 4 5 6 7 8 9 10 11 12
⍴,x ⍝ The shape is the total number of elements
12
(,×/⍴x) ≡ ⍴,x ⍝ Or the product of the original shape
1
Ravelling a scalar yields a singleton vector.
,3
3
3 ≡ ,3 ⍝ Not the same
0
⍴,3 ⍝ It's now a vector
1
String notation cannot produce a singlecharacter string since it produces a scalar character instead. Using Ravel on a list of characters in quotes ensures it will be a vector of characters.
≢⍴ 'a' ⍝ Scalar character
0
≢⍴ ,'a' ⍝ String
1
Axis specification may accept either a vector of two or more adjacent axis indices, or a single noninteger value. If multiple axes are given, they are merged into one axis whose length is the product of their lengths. If only one value is given, a new axis of length 1 is inserted in the indicated "gap" between axes.
⍴ ,[2 3] 5 4 3 2⍴0
5 12 2
⍴ ,[2.5] 5 4 3 2⍴0
5 4 1 3 2
Description
The ravel of an array A
has shape ,×/⍴A
and shares elements with A
. Thus Ravel may be modelled as a reshaping function {(×/⍴⍵)⍴⍵}
. The element with index vector I
is moved to index (⍴A)⊥I
in index origin 0, or ⎕IO+(⍴A)⊥I⎕IO
in arbitrary index origin.
As with any reshaping, the result of Ravel has the same prototype as the argument.
History
Ravel was present in the first version of APL\360^{[1]} and has been included in every APL since.
External links
Lessons
Documentation
References
 ↑ Falkoff, A.D., and K.E. Iverson. "The APL\360 Terminal System". Research Report RC1922, IBM, 19671016.
APL features [edit]  

Syntax  Array ∙ Function ∙ Operator ∙ Assignment 
Builtins  Primitive function ∙ Primitive operator ∙ Quad name 
Array model  Shape ∙ Rank ∙ Depth ∙ Bound ∙ Index ∙ Axis ∙ Ravel ∙ Ravel order ∙ Element ∙ Scalar ∙ Vector ∙ Matrix ∙ Simple scalar ∙ Simple array ∙ Nested array ∙ Box ∙ Cell ∙ Major cell ∙ Subarray ∙ Empty array ∙ Prototype 
User definition  Tradfn ∙ Dfn ∙ Tacit 
Concepts and paradigms  Leading axis theory ∙ Scalar extension ∙ Conformability ∙ Scalar function ∙ Glyph ∙ Identity element 
Errors  LIMIT ERROR ∙ RANK ERROR 
APL builtins [edit]  

Primitive functions  
Scalar  
Monadic  Conjugate ∙ Not ∙ Roll ∙ Type  
Dyadic  Plus ∙ Equal to (Xnor) ∙ Not Equal to (Xor)  
NonScalar  
Structural  Shape ∙ Reshape ∙ Depth ∙ Ravel ∙ Reverse  
Selection  Take ∙ Drop ∙ Unique  
Selector  
Computational  
Primitive operators  Each  
Quad names  
Constants  Index origin ∙ Migration level  
Functions  
Operators  
Other  Zilde ∙ High minus 