According to the Dyalog APL language reference
the test condition to the right of :If must return a single element Boolean value 1 (true) or 0 (false)
Is there any particular reason why the value is allowed to be an array rather than requiring it to be a scalar? Is it only for convenience? Do other other APL dialects which implements the If statement also allow non-scalar guards?
(A scalar is a 0-dimensional array.)
A few more details to expand on Jürgen's answer:
It is very common to have 1-element vectors where a scalar is actually appropriate. This is especially true in APLs that do not have the monadic
≢ (Tally) function (including Dyalog prior to version 14.0), prompting people to use
⍴ (Shape) instead. For the same reason, allowing a 1-element array (singleton) is widely allowed in many contexts where, strictly speaking, a scalar would be required. This is known as singleton extension. Here are some examples of constructs that give a 1-element vector when one would actually want a scalar:
Indeed, it was traditionally quite awkward to get a scalar, and this leniency was therefore a very welcome convenience. Some APLs didn't (and still don't!) have
⍬ for the empty numeric vector, but
⍴ was lenient about types and allowed
'' so the shortest contruct was the unintuitive
''⍴expression. Today we have
↑ as first (depending on dialect).
Before control structures were added to various APLs (some still don't have them!), the only flow control was
→ (Branch) which was defined as "go to the first line number in the array on the right, if any; do nothing if empty", allowing various computational methods to select branching destination. For example:
→(0=⍴⍴myArray)/SCAL ⍝ code for non-scalar arrays →ENDIF SCAL: ⍝ code for scalars ENDIF:
The new control structures had to allow easy conversion of existing code and support common patterns:
:If 0≠⍴⍴myArray ⍝ code for non-scalar arrays :Else ⍝ code for scalars :EndIf
I don't have access to APL+, but APLX also allows 1-element vectors — not other singletons. As far as I know, it is unique to Dyalog to also accept higher-rank singletons.