tricu/README.md

95 lines
3.7 KiB
Markdown
Raw Normal View History

2024-12-29 08:29:25 -06:00
# tricu
2024-12-18 19:15:56 -06:00
## Introduction
2024-12-29 10:37:37 -06:00
tricu (pronounced like "tree-shoe" in English) is a purely functional interpreted language implemented in Haskell. [I'm](https://eversole.co) developing tricu to further research the possibilities offered by the various forms of [Tree Calculi](https://github.com/barry-jay-personal/typed_tree_calculus/blob/main/typed_program_analysis.pdf).
2024-12-29 08:29:25 -06:00
tricu offers minimal syntax sugar yet manages to provide a complete, intuitive, and familiar programming environment. There is great power in simplicity. tricu offers:
2024-12-18 19:15:56 -06:00
1. `t` operator behaving by the rules of Tree Calculus
1. Function definitions/assignments
1. Lambda abstractions eliminated to Tree Calculus forms
1. List, Number, and String literals
2024-12-29 10:37:37 -06:00
1. Parentheses for grouping function application
These features move us cleanly out of the [turing tarpit](https://en.wikipedia.org/wiki/Turing_tarpit) territory that you may find yourself in if you try working only with the `t` operator.
2024-12-29 10:37:37 -06:00
tricu is the word for "tree" in Lojban: `(x1) is a tree of species/cultivar (x2)`. This project was named "sapling" until I discovered the name is already being used for other (completely unrelated) programming language development projects.
2024-12-18 19:15:56 -06:00
## What does it look like?
```
2024-12-29 12:22:24 -06:00
-- Anything after `--` on a single line is a comment
-- We can define functions or "variables" as Tree Calculus values
2024-12-28 22:20:43 -06:00
false = t
_ = t
true = t t
-- We can define functions as lambda expressions that are eliminated to Tree
-- Calculus terms.
2024-12-29 08:29:25 -06:00
id = (\a : a) -- `id` evaluates to the TC form of: t (t (t t)) t
2024-12-28 22:20:43 -06:00
triage = (\a b c : t (t a b) c)
2024-12-29 08:29:25 -06:00
-- Intensionality! We can inspect program structure, not just inputs/outputs:
2024-12-28 22:20:43 -06:00
test = triage "Leaf" (\_ : "Stem") (\_ _ : "Fork")
-- REPL
2024-12-29 08:29:25 -06:00
-- `tricu <` is the input prompt
-- `tricu >` is the Tree Calculus form output. Most are elided below.
-- `READ -:` is an attempt to interpret the TC output as strings/numbers.
tricu < test t
tricu > Fork (Fork Leaf (Fork ...) ... )
READ -: "Leaf"
tricu < test (t t)
READ -: "Stem"
tricu < test (t t t)
READ -: "Fork"
tricu < map (\i : listConcat i " is super cool!") [("Tree Calculus") ("Intensionality") ("tricu")]
READ -: ["Tree Calculus is super cool!", "Intensionality is super cool!", "tricu is super cool!"]
```
## Installation and Use
2024-12-28 21:58:52 -06:00
You can easily build and/or run this project using [Nix](https://nixos.org/download/).
- Quick Start (REPL):
2024-12-29 10:41:04 -06:00
- `nix run git+https://git.eversole.co/James/tricu`
- Build executable in `./result/bin`:
2024-12-29 10:41:04 -06:00
- `nix build git+https://git.eversole.co/James/tricu`
2024-12-31 10:09:36 -06:00
`./result/bin/tricu --help`
```
tricu Evaluator and REPL
tricu [COMMAND] ... [OPTIONS]
tricu: Exploring Tree Calculus
Common flags:
-? --help Display help message
-V --version Print version information
tricu [repl] [OPTIONS]
Start interactive REPL
tricu eval [OPTIONS]
Evaluate a file and return the result of the expression in the final line
-f --file=FILE Optional input file path for evaluation.
Defaults to stdin.
-o --output=OUTPUT Optional output file path for resulting output.
Defaults to stdout.
-t --form=FORM Optional output form: (fsl|tree|ast|ternary|ascii).
Defaults to fsl.
tricu decode [OPTIONS]
Decode a Tree Calculus value into a string representation
-f --input=ITEM Optional file path to attempt decoding.
Defaults to stdin.
```
2024-12-18 19:15:56 -06:00
## Acknowledgements
Tree Calculus was discovered by [Barry Jay](https://github.com/barry-jay-personal/blog).
2024-12-29 08:29:25 -06:00
[treecalcul.us](https://treecalcul.us) is an excellent website with an intuitive playground created by [Johannes Bader](https://johannes-bader.com/) that introduced me to Tree Calculus. If tricu sounds interesting but compiling this repo sounds like a hassle, you should check out his site.