# Extending Structural Functions to Scalars

Traditionally, the set of monadic reversing or reflecting primitives, Reverse-First (`⊖`), Transpose (`⍉`), and Reverse (`⌽`) apply to entire arrays and are defined as identity functions on scalar arguments. Dyalog v19.0 extends the definitions to provide equivalent reflections on scalars.

## Character Data

We expect that the new transformations will be most useful on characters. For example:

```      (⍉'A')(⌽'P')(⊖'L')
ᗉꟼΓ
```

Note that you can apply the same transformation to all the items of an array using Each (`¨`) or Rank (`⍤0`):

```      ⌽¨ 'New APL?'
Ͷɘw Aꟼ⅃⸮
(⊖⍤0) 'CAN HAPPEN SOON!'
C∀N H∀ЬЬEN ꙄOOͶ¡
```

Composition allows the combination of reflections to perform rotation:

```      ⊖∘⍉¨ '→A/common'  ⍝ 90° clockwise rotation
↓ᗆ\ᴒoᴟᴟoᴝ
⌽∘⊖¨ '→A/common'  ⍝ 180° rotation
←∀/ɔoɯɯou
```

We can combine the above techniques with additional structural functions, including reflection of the entire array, to achieve more advanced effects that are often needed in modern user interfaces:

```      ⌽¨ ⌽ 'New APL?'     ⍝ mirror
⸮⅃ꟼA wɘͶ
⊖∘⍉¨ ⍪ '→A/common'  ⍝ vertical
↓
ᗆ
\
ᴒ
o
ᴟ
ᴟ
o
ᴝ
⌽∘⊖¨ ⌽ '→A/common'  ⍝ upside-down
uoɯɯoɔ/∀←
```

## Numeric Data

Although the transformations are more easily applicable to characters, many numbers are also in the domain of the extended functions:

```      ⌽¨ 1.618 2.71828 3.1415
816.1 82817.2 5141.3
⌽¨ 3J4 0J1 0.5
4J3 1 5
⌽∘⊖¨ 60 69 908    ⍝ 180° rotation
9 69 806
⍉⌽ 8              ⍝ 90° counter-clockwise rotation
1.797693135E308
```

## Notes

### Character Data

• Although the new definitions are available in both 32-bit and 64-bit Unicode editions of Dyalog, very few characters can be reflected in the Classic edition.
• A `TRANSLATION ERROR` will be signalled if the required result cannot be represented.

For example, using the Classic Edition where the Rank operator is represented as `⎕U2364`:

```      (⊖ ⎕U2364 0) 'PHI!'
bHI¡
(⊖ ⎕U2364 0) 'ABC'
TRANSLATION ERROR: Unicode character ⎕UCS 8704 not in ⎕AVU
(⊖⎕U2364 0)'ABC'
∧
```

### Numeric Data

• The result of numeric reflections can depend on the value of `⎕FR`.
• A `DOMAIN ERROR` will be signalled if the required result cannot be represented.

For example, beginning with the default value `⎕FR←645`:

```      ⌽ 1.2345E67
DOMAIN ERROR
⌽1.2345E67
∧
⎕FR←1287
⌽ 1.2345E67    ⍝ 76×10*5432.1
9.56783313E5433
```

## Conclusion

Although it is extremely unlikely that real applications rely on the current behaviour, the extensions are potentially breaking changes and are, therefore, being released as part of a major version upgrade.

We are somewhat surprised that these obviously useful extensions have been ignored by the APL community for such a long time, and are very pleased to finally make them available to commercial, educational and hobbyist users. Please contact ʇɹoddns@dyalog.com if you would like to test a pre-release of Dyalog v19.0 and help us understand the potential impact on existing applications.