The apparently simple 'reversal' operation has multiple non-equivalent implementations depending on assumptions about rests, events, and scale
Reversing a sequence seems obvious — reverse the order — but the implementation depends on non-trivial choices. For a-b-c-d-, naive reversal gives d-c-b-a- only if dashes are continuations; if dashes are rests, the correct reversal is -d-c-b-a. Should reversal operate on the whole sequence or on each bar/sub-segment (relevant for infinite patterns)? Should event onsets and offsets be swapped, or only onset order? Should each sound sample also be played backwards? Magnusson and McLean use reversal as a case study to argue that each of Spiegel’s classes is ‘not a constraint, but a heuristic’ — the name suggests a direction, but the operation varies wildly with one’s conception of time and event. This is why pattern vocabularies cannot be standardized across systems.
Examples
TidalCycles rev reverses event order within a cycle; SuperCollider’s .reverse reverses an array; ixi lang’s revert is a method on an agent. These three ‘reversals’ are not interchangeable.
Assessment
Give two implementations of ‘reversal’ that differ in how they treat rests/continuations, and explain why this ambiguity means pattern-function names cannot be standardized across systems.