@Ven I'm not sure (that we can ever find out, now that its author isn't with us any more). It does seem a bit odd to mix levels (main data vs replacement/modifier) like that, and forces writing ⍵⍵ to ignore left arg (just as annoying as with e.g. ⌺ and ⍣), but I can see the occasional use. Maybe if you think of @ as a special case of ⍢ it makes more sense that it shouldn't pass in ⍺, as ⍺ is really part of ⍺⍺ rather than a proper argument.
What do I mean by ⍺ being a part of ⍺⍺? Note that A f@g B is exactly the same as A∘f@g B and A@g B is exactly the same as A∘⊣@g B so you can see that ⍺ for @ isn't really a proper argument, but just an operand shorthand.
@ is a special case of ⍢ in that A f@g B and A∘f@g B are the same as A∘f⍢{(,g ⍵)/,⍵}B but not the same as A f⍢{(,g ⍵)/,⍵}B which would be (,g A)/,A)f@g B so you can see here too that passing A into g makes no sense for ⍢ and therefore no sense for @ either, the latter being a special case of the former.
What could be consistent, is that the A f⍢g B would supply the "opposite" argument as left argument to g, but then what would the inverse application look like‽
@Ven That is idiomatic, although I tend to write A/⍨g A. Yeah, I know that a few people have wanted the "filter" operator {⍵⌿⍨⍺⍺ ⍵} but @arcfide argues fiercely that it constitutes unnecessary abstaction.
@Ven I'm very confident that f⊢⍤⌿⊢ will work in 18.0 (although maybe not spelled like that). It isn't as neat as a dedicated primitive, but we'd need four of them, and you'll quickly learn to read ⊢⍤⌿ as "filters".
@Ven ⊢⍤⌿ is simply the function⌿ (as opposed to the possibly-but-actually-unfortunately-in-this-case-operator)
@Ven I'm proposing that ⍤ is "overloaded" so that f⍤g means (f g) which cures schizophrenia because an operator cannot be an operand, so ⊢⍤/ forces / to be a function and (⊢ g) is the same as g so ⊢⍤/ is the function/
@Ven But J already has "atop" as @ even though it doesn't have mentally ill primitives ;-) however, atop is essential in J because (f g)Bisn'tf g B and "dfns" are very awkward.
And K doesn't need "atop" because (f g h)B is f g h B
@nathanrogers Dfns and tacit functions are always ambivalent, but in Dyalog APL tradsfns have to declare themselves so. Other APL's don't give you a choice for tradfns (i.e. they are also always ambivalent).