Binding Strength

For two entities X and Y that are adjacent in an expression (that is, X Y), the binding strength between them and the result of the bind is shown in this table:

    Y
    A F H MOP DOP DOT IDX
X A
6 A
3 AF
3 AF
4 F
   
7 REF
4 A
F
2 A
1 F
4 F
4 F
   
4 F
H
   
1 F
4 F
4 F
   
4 H
AF
2 A
1 F
         
MOP    
4 ERR
       
DOP
5 MOP
5 MOP
5 MOP
       
JOT
5 MOP
5 MOP
5 MOP
4 F
     
DOT
6 ERR
5 MOP
5 MOP
 
6 ERR
   
REF
7 A
7 F
7 H
7 MOP
7 DOP
   
IDX
3 ERR
3 ERR
3 ERR
       

where

  • A: Array1, for example, 0 1 2 'hello' ⍺ ⍵
  • F: Function1 {primitive | defined | derived | system}, for example, + - +.× myfn ⎕CR {⍺ ⍵}
  • H: Hybrid1 function/operator, that is, / ⌿ \ ⍀
  • AF: Bound left argument, for example, 2+
  • MOP: Monadic operator1, for example, ¨ ⍨ &
  • DOP: Dyadic operator, for example, ⍣ ⍠ ⍤ ⌸
  • JOT: Jot, that is, compose/null operand
  • DOT: Dot, that is, reference/product .
  • IDX: square-bracketed expression, for example, [⍺+⍳⍵]
  • ERR: Error

In this table:

  • the higher the number, the stronger the binding
  • an empty field indicates no binding for this combination; an error.

For example, in the expression a b.c[d], where a, b, c and d are arrays, the binding proceeds:

      a b . c [d]
       6 7 6 4      ⍝ binding strengths between entities
     a (b.) c [d]
       0    7 4
     a (b.c) [d]
       6     4
     (a(b.c))[d]

  1. Indicates a "first-class" entity, which can be parenthesised or named.