diff --git a/README.md b/README.md index 55ddfdb..6432be3 100644 --- a/README.md +++ b/README.md @@ -2,38 +2,42 @@ ## Introduction -sapling is a "micro-language" that I'm working on to investigate [Tree Calculus](https://github.com/barry-jay-personal/typed_tree_calculus/blob/main/typed_program_analysis.pdf) . +sapling is a "micro-language" that [I'm](https://eversole.co) working on to investigate [Tree Calculus](https://github.com/barry-jay-personal/typed_tree_calculus/blob/main/typed_program_analysis.pdf) . -It offers a minimal amount of syntax sugar: +It offers a minimal amount of syntax sugar yet provides a complete and intuitive programming environment. Sapling offers: - `t` operator behaving by the rules of Tree Calculus - Function ("variable") definitions - Lambda abstractions -- List, Number, and String literals (WIP) - -This is an active experimentation project by [someone who has no idea what they're doing](https://eversole.co). +- List, Number, and String literals ## What does it look like? ``` -false = t -_ = t -true = t t -id = (\a : a) -triage = (\a b c : t (t a b) c) -match_bool = (\ot of : triage of (\_ : ot) t) -and = match_bool id (\_ : false) -if = (\cond then else : t (t else (t t then)) t cond) -triage = (\a b c : t (t a b) c) -test = triage "leaf" (\_ : "stem") (\_ _ : "fork") +-- Anything after `--` on a line is a comment +-- We can define functions or "variables" as tree calculus values +false = t +_ = t +true = t t +-- We can define functions as lambda expressions that are eliminated to tree +-- calculus terms. +id = (\a : a) -- t (t (t t)) t +triage = (\a b c : t (t a b) c) +triage = (\a b c : t (t a b) c) +-- Intensionality !!! +test = triage "Leaf" (\_ : "Stem") (\_ _ : "Fork") --- The REPL outputs the tree form results by default; they are elided here. +-- REPL +-- `sapling <` is the input prompt +-- `sapling >` is the Tree Calculus form output. Most are elided below. +-- `DECODE -:` is an attempt to interpret the TC output as strings/numbers. sapling < test t -DECODE -: "leaf" +sapling > Fork (Fork Leaf (Fork ...) ... ) +DECODE -: "Leaf" sapling < test (t t) -DECODE -: "stem" +DECODE -: "Stem" sapling < test (t t t) -DECODE -: "fork" +DECODE -: "Fork" sapling < map (\i : listConcat i " is super cool!") [("He") ("She") ("Everybody")] DECODE -: ["He is super cool!", "She is super cool!", "Everybody is super cool!"] ```