--- title: "Syntax" weight: 1 --- # Rays Either a variable (uppercase, possibly followed by digits) or a polarised (+/-) or unpolarised (lowercase, possibly containing `_` and digits) function symbol applied to other rays (or nothing in case of constants): `X`, `a`, `f(X)`, `+f(X)`, `-f(-h(a, Y1), X2)`, `+add_dec(0, 2, 2)`. Commas can be omitted: `-f(-h(a Y1) X2)`, `+add_dec(0 2 2)`, `string(hello i am X)`. # Cons There is a special binary infix function symbol `:` which can be used to concatenate rays: `a:X`, `a:b:b:X`, `f(a:X):+f(0:1:X):-f(Y)`. # Stars An unordered sequence of rays ending with a semicolon `;`: ``` X a +f(X); ``` # Constellations An unordered sequence of stars: ``` X a +f(X); -f(-h(a Y1) X2); +add_dec(0 2 2); ``` All variables are local to their stars, hence the occurrences of `X` in the first line are distinct from the one in the second line. # Focus You can prefix stars with a `@` symbol to put a *focus* over them. This will affect the behaviour of computation: ``` @X a +f(X); @-f(-h(a Y1) X2); +add_dec(0 2 2); ``` # Comments ``` 'this is a comment on a single line 'this is another comment ''' this is a comment on several lines ''' ```