title:Lil Quick Reference Lil Quick Reference =================== Types ----- | `typeof` | False | Examples | | :----------- | :--------- | :------------------------------------ | | `"number"` | `0` | `42` `37.5` `-29999` | | `"string"` | `""` | `"foo\nbar"` | | `"list"` | `()` | `11,22,33` `list 3` | | `"dict"` | `()dict()` | `("a","b") dict 11,22` | | `"table"` | n/a | `table range 2` `insert a with 1 end` | | `"function"` | n/a | `on x y do x+y end` | Primitives ---------- | Valence | Purpose | | | :------ | :--------- | :--------------------------------------------------------------------------- | | monad | arithmetic | `-` `!` `floor` `cos` `sin` `tan` `exp` `ln` `sqrt` `mag` `unit` `heading` | | monad | reducers | `count` `first` `last` `sum` `prod` `min` `max` `raze` | | monad | data | `range` `keys` `list` (enlist) `rows` `cols` `table` `typeof` `flip` | | dyad | arithmetic | `+` `-` `*` `/` `%` (y mod x) `^` (pow) `&` (min) `|` (max) | | dyad | logical | `<` `>` `=` (conforming equal) `~` (match) `unless` (x if y is `0`) | | dyad | string | `fuse` `split` `parse` `format` `like` | | dyad | data | `,` (concat) `@` (index each right) `dict` `take` `drop` `limit` `in` | | dyad | joins | `join` (natural join/zip) `cross` (cross join/cartesian product) | Flow ---- - `if bool ... end` - `if bool ... else ... end` - `if bool ... elseif bool ... else ... end` (etc) - `each val key index in x ... end` - `while bool ... end` - `send name[args]` Queries ------- - `select exprs clauses from y` reorder, compute, or filter a table - `update exprs clauses from y` modify rows/columns of a table in place - `extract exprs clauses from y` like select, but yields non-tabular values - `insert c1 c2 with "A" 11 "B" 22 end` create a new table - `insert c1 c2 with "A" 11 "B" 22 into d` append to a table - `exprs` can be any number of expressions in the forms: - an implicitly named bare expression (`id`, `2*index`) - an explicitly named expression (`ident:id`, `dogyears:7*age`) - a quoted name, for invalid identifiers (`"not a lil id":foo`) - if no expressions are provided, all columns will be returned, like `select *` in SQL - `clauses` can be any sequence of the following, evaluated right to left: - `by a`: group rows by the unique values of column b - `where a`: filter rows by a boolean column a - `orderby a asc`/`orderby a desc`: sort rows, comparing values of column a as by `<`/`>` - special columns/values available when computing any column expression: - `index`: magic column of original row numbers - `gindex`: magic column of current row number within group (or all rows if ungrouped) - `group`: magic column of row's group, by appearance (or `0` if ungrouped) - `column`: dictionary of the entire group's columns (or all rows if ungrouped) Formatting ---------- A format is `%[name]*-0N.DX`: `*` skip, `0` pad, `N` width. `-` is invert char class (`ro`) or left justify. `.D` is decimal places (`fc`), size of char class (`ro`), or truncate to `D` characters. | `X` | Purpose | | | :-------- | :------- | :--------------------------------------------------------------------------------------------- | | `%nmz` | Parsing | literal `%`, number of chars read, matches? matches to end? | | `ro` | Matching | repeat (0 or more in char class), optional (0 or 1 in char class) | | `sula` | String | string, uppercase string, lowercase string, ASCII chars | | `bficChH` | Number | bool, float, int, currency (`-$1.23`), plain currency (`-1.23`), hex lowercase, hex uppercase | | `jep` | Misc. | JSON, unix epoch, time-parts {`year`, `month`, `day`, `hour`, `minute`, `second`} | | `qv` | Lil | quoted Lil string literal, Lil variable name | Glob patterns for `like`: - `.`: any single character. - `#`: any single digit 0-9. - `*`: 0 or more of any character. - backtick escapes a subsequent special character.