Funciton (pronounced: /ˈfʌŋkɪtɒn/) is a two-dimensional, minimalistic, declarative programming language invented by User:Timwi in 2011. Simply speaking, Funciton programs consist of lines and boxes. Each line carries data from one box to the next. A Funciton program must have exactly one loose end; a line that just stops somewhere. This is the program output. Boxes with a double-struck line and at least one outgoing line are literals, and such a box may contain an integer written in decimal.
Boxes with a double-struck line can be empty, too. In this case, such a box represents the data passed to the program via STDIN. The data is encoded according to the string encoding described later. Multiple such boxes in a program do not read multiple different inputs from STDIN. The interpreter reads STDIN only once, and then all such boxes return the same data.
A T-junction in which the two parallel connectors are inputs and the perpendicular one is an output calculates the NAND of two numbers. In C notation, NAND(a,b) = ~(a & b).
A T-junction in which the two parallel connectors are outputs and the perpendicular one is an input is a splitter. This is NOT an operation, but a syntactic element that splits a line into two. It allows you to access the same value more than once.
Whether a T-junction is a NAND operation or simply a splitter is implicit in which incoming lines are inputs and which are outputs.
Remember that numbers in Funciton are arbitrary-size integers. Negative numbers can be conceptualized in two ways that are equivalent. You can think of it as infinitely many bits; -1 has every bit set. There is a least significant bit, but no most significant bit; any more than there is a most significant 0-bit in a non-negative number. You can also think of it as finitely many bits followed by a sign bit, in which case the bit-shift operation performs sign extension.
A function declaration consists of a declaration header and one or more loose ends. The header is a box, containing the function name, that has two double-lined and two single-lined edges on opposite sides. A loose end defines a function output.
The lines emerging from the declaration header define inputs to the function. Loose ends define outputs. A function can have multiple outputs. The directions in which the inputs “leave” the declaration header and the directions in which the outputs “point” determine how the function can be called.
Less-than and shift-left are both calculated by a single ope