about summary refs log tree commit diff stats
path: root/lil
diff options
context:
space:
mode:
authorelioat <hi@eli.li>2024-06-08 15:23:03 -0400
committerelioat <hi@eli.li>2024-06-08 15:23:03 -0400
commit0d5a8c704d517e7f880c5b704867e3d491e9ec8f (patch)
tree46397d66cb6a48ad627741aef883e61840d85779 /lil
parent1d8144ccf117e8db562e8adb520f582c9be7fd4e (diff)
downloadtour-0d5a8c704d517e7f880c5b704867e3d491e9ec8f.tar.gz
*
Diffstat (limited to 'lil')
-rw-r--r--lil/lilquickref.md83
1 files changed, 83 insertions, 0 deletions
diff --git a/lil/lilquickref.md b/lil/lilquickref.md
new file mode 100644
index 0000000..2df9d4b
--- /dev/null
+++ b/lil/lilquickref.md
@@ -0,0 +1,83 @@
+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.