# The Reflex/Commute Operator

The monadic operator `⍨` is defined and modeled as follows:

``````     f⍨ ⍵  ←→  ⍵ f ⍵
⍺ f⍨ ⍵  ←→  ⍵ f ⍺

{⍺←⍵ ⋄ ⍵ ⍺⍺ ⍺}
``````

Reflex

Some common well-known functions can be written as `f⍨` where `f` is itself a well-known function:

`   +⍨    `double
`   ×⍨    `square
`   ?⍨    `random permutation
`   ⍳⍨    `self-index, APL Amuse-Bouche 3

See http://www.jsoftware.com/jwiki/Essays/Reflexive for further examples.

Awareness of the importance of the reflexive case might have led us to avoid the mistake in the definition of the dyadic case of `⍋`. That is, if

``````   ⍺⍋⍵ ←→ ⍺⌷⍨⊂⍋⍵
``````

then `⍋⍨⍵` would be sort. Ken Iverson seemed to have had this awareness because that’s how he defined the dyadic case of `⍋` in J. (I say “seemed” because he expressed surprise when first shown this use of `⍋⍨`.)

The monadic case `f⍨` came relatively late. It was not in Operators and Functions (1978) nor Rationalized APL (1983), and only introduced in A Dictionary of APL (1987). It came to Ken Iverson when he explicitly looked to natural languages for inspiration, whence it became “obvious”: `f⍨⍵ ←→ ⍵ f ⍵` is the reflexive voice (je m’appelle Roger) and `⍺ f⍨ ⍵ ←→ ⍵ f ⍺` is the passive voice (the programming competition was won by a 17-year-old student vs. a 17-year-old student won the programming competition), both having evolved in natural languages for effective communication and elegant expression.

Commute

The alternative definition of `⍺⍋⍵` above, while illustrating the importance of the reflexive case (`f⍨ ⍵`), also illustrates the passive case (`⍺ f⍨ ⍵`). `⍺⌷⍨⊂⍋⍵` can be read and understood as “`⍺` indexed by the enclosed grade of `⍵`“, a different (and in my mind a better) emphasis than `(⊂⍋⍵)⌷⍺`, “the enclosed grade of `⍵`, indexed into `⍺`“.

I note that Arianna Locatelli, winner of the 2015 APL Problem Solving Competition but an APL beginner, used `⍨` twenty-one times in her presentation at Dyalog ’15. For example,`⍨` was used in the computation of the standard deviation (slide 13):

``````   sol5←{a←,⍵ ⋄ ⊃0.5*⍨(⍴a)÷⍨+/2*⍨a-(⍴a)÷⍨+/a}
``````

I believe this formulation comes naturally because `⍨` can be used to write functions in the order that they are applied. Another way to put it is that `⍨` reduces the need for long-scope parentheses. For example:

``````   (2×a) ÷⍨ (-b) (+,-) 0.5 *⍨ (b*2)-4×a×c
((-b) (+,-) ((b*2)-4×a×c)*0.5) ÷ 2×a
``````

That `⍨` is easy to implement, `{⍺←⍵ ⋄ ⍵ ⍺⍺ ⍺}`, is neither here nor there; its value as a tool of thought is easily demonstrated.