@RosLuP g←{⍺⍺ ⍵} should work in place of your g if I understand what you want to happen. Then g becomes an operator, in which ⍺⍺ is the left operand and ⍵⍵ is the right.
Note that once ⍺⍺ is added, it will need a left operand (and once ⍵⍵ is added, it will need both operands). After that operator has gotten the operand of ⍺⍺ (and ⍵⍵ if used) it acts like a function. You should review Lesson 2 for more info
@dzaima Unfortunately there isn't. There are various ways to work around it: you could use a nested ⍺{condition:then⋄else}⍵ or if you're working on numeric data you can do (condition×then)+(~condition)×else, or if you're applying a function conditionally: f⍣condition⊢argument
@EriktheOutgolfer I hadn't seen this discussion but I think I've solved this or a similar problem before.
@J.Sallé I find APL's scan (\) counter-intuitive too: f\a b c is a(a f b)(a f (b f c)) in order to be consistent with the right-associativity of APL grammar. This means that if f is a user-defined function, intermediate results can't be reused, so f is applied O(n×n) times. The alternative would be to follow the order of array indices and "go from left to right": a(a f b)((a f b)f c) but it's too late to change the language.
@RosLuP in APL they use slightly different terminology than in mainstream functional programming - they call higher order functions "operators" and their arguments "operands"
@RosLuP the left and right operands are denoted with ⍺⍺ and ⍵⍵ (which are different from ⍺ and ⍵)
A function in APL is always ambiguous - it can be applied monadically or dyadically. However an operator is known in advance to be either monadic or dyadic (with respect to its operands).
@RosLuP I don't understand the purpose of this expression, but if "a" is meant to be a function, it should probably be something like h←{a←⍺⍺⋄{a ⍵}⍵} and then the operand must be to the left of h.
@RosLuP No, there is no precedence among APL functions, the are "right-associative" which means that the rightmost will be calculated first (except for any parentheses).
@Uriel Yup. Error 0 means all errors in range 1-999. (Error 1000 means all above 1000, but those are special exception errors you probably don't need to worry about).