# Documentation
Some brief documentation to start out with.
Tables
Create a table with a single cell
#value = 1
#name = "Alan Turing"
Create an array
#vector = [1 2 3]
Create a column array
#column = [1; 2; 3]
Create a 2D table
#two-by-three = [1 2 3
4 5 6]
Create a table with named columns
#with-columns = [|name age height|
"Yan" 20 100
"Seth" 23 102]
Create an inline table
#inline-table = [name: "Yan" age: 20 height: 100]
Create a nested table
#nested-table = [type: "div" parameters: [width: 100 height: 50]]
Slicing Tables
Tables are 1-indexed, meaning the first element of the table is at index 1 (not 0 as in C-like languages)
Tables are indexed with the index operator {}. For example, we can get the 3rd element of a vector:
#slice1 = #vector{3}
Get the 2nd row, 3rd column:
#slice2 = #two-by-three{2,3}
Grab every row or column with the : operator
#slice3 = #two-by-three{:,3}
Slice a range of columns
#slice4 = #two-by-three{1,2:3}
Access a named column
#slice5 = #with-columns.height
Or a specific row of a column
#slice6 = #with-columns.height{2}
But you can still use indexes on tables with named columns
#slice7 = #with-columns{2,3}
Access the value of a nested table by chaining {} operators
#slice8 = #nested-table{2}{1}
Math
Mech identifiers can contain - and / characters, which means math operators aside from negation must have spaces around them.
Math with scalars
#result1 = 1 + 2
Math with negation
#result1 = 1 + -(7 + 2)
Math with scalar and vector
x = [1 2 3]
#result2 = x + 1
Math with vectors. The operator is applied element-wise
x = [1 2 3]
y = [4 5 6]
#result3 = x + y
Element-wise operations apply to 2d tables as well
x = [1 2 3
4 5 6]
y = [7 8 9
6 5 4]
#result4 = x + y
Functions use named arguments. The same function can have different arguments depending on the input
#result5 = math/sin(degrees: 90)
#result6 = math/sin(radians: 90 * 3.14 / 180)
The input to a function can be a column. Regular functions operate element-wise on columns, and result in a column
x = [30; 60; 90; 180; 240; 360]
#result7 = math/sin(degrees: x)
Aggregates operate on a column, but the result is a single cell
x = [30; 60; 90; 180; 240; 360]
#result8 = stats/sum(column: x)