Tacit programming

Tacit functions apply to implicit arguments following a small set of rules. This is in contrast to the explicit use of arguments in dfns and tradfns (which have named arguments). Known dialects which implement trains are Dyalog APL, dzaima/APL, ngn/apl and NARS2000.

Primitives
All primitive functions are tacit. Some APLs allow primitive functions to be named.

Derived functions
Functions derived from an operator and operand are tacit.

Trains
A train is a series of functions in isolation. An isolated function is either surrounded by parentheses or named. Arguments are processed by the following rules:

A 2-train is an atop:

A 3-train is a fork:

The left tine of a fork (but not an atop) can be an array:

Examples
One of the major benefits of tacit programming is the ability to convey a short, well-defined idea as an isolated expression. This aids both human readability (semantic density) and the computer's ability to interpret code, potentially executing special code for particular idioms.

Fractions
We can convert decimal numbers to fractions. For example, we can convert $$2.625$$ to the improper fraction $$21\over 8$$ with Alternatively, we can convert it to the mixed fraction $$2{5\over 8}$$ with A mixed fraction:

Component of a vector in the direction of another vector
Sometimes a train can make an expression nicely resemble its equivalent definition in traditional mathematical notation. As an example, here is a program to compute the component of a vector $$\textbf{a}$$ in the direction of another vector $$\textbf{b}$$:
 * $$\textbf{a}_\textbf{b} = (\textbf{a}\cdot\hat{\textbf{b}})\hat{\textbf{b}}$$

For a more parallel comparison of the notations, see the comparison with traditional mathematics.