Trains


L and R are arbitrary arrays, f, g, h, etc, are arbitrary functions of any type: primitive, userdefined, system, and/or derived. 
This clever idea from the designers of J is called Trains where a parenthesized sequence of functions (which normally would signal a SYNTAX ERROR) can be interpreted as per the above descriptions. Very nicely, they fit into and extend the spectrum of function definition syntax from userdefined to dynamic to trains to operator expressions. They are another and very interesting form of functional programming.
Note that the spacing between functions is for visual purposes only — it has no effect on the interpretation.
For example,
(,⍎)'2+3'
←→ '2+3',⍎'2+3'
←→ '2+3',5
2+3 5
avg←(+⌿ ÷ ≢) defines a function that computes the average of a numeric vector.
avg 1 2 3 4
←→ (+⌿ ÷ ≢) 1 2 3 4
←→ (+⌿1 2 3 4) ÷ ≢1 2 3 4
←→ 10 ÷ 4
2.5
Longer Trains are defined as follows:
(e f g h) ←→ (e (f g h))
(d e f g h) ←→ (d e (f g h))
and in general
Even length:  (a b c ...) ←→ (a (b c ...)) 
Odd length:  (a b c ...) ←→ (a b (c ...)) 
For more applications of this concept, see the discussion in the Learning J manual.
There is also a series of tables of common function expressions and their corresponding Train.