aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMarvin Borner2024-07-28 13:34:28 +0200
committerMarvin Borner2024-07-28 13:34:28 +0200
commit9ae3983e74c5a2301b3a595f47bbe8ce27eb6380 (patch)
tree7a677f377c7a1fec9f61bf18bda449be2273320f
parent6ad85ef29f7da7846ccc779c7c2a192b4db301b1 (diff)
Improved documentation
-rw-r--r--docs/wiki_src/coding/data-structures.md2
-rw-r--r--readme.md38
2 files changed, 28 insertions, 12 deletions
diff --git a/docs/wiki_src/coding/data-structures.md b/docs/wiki_src/coding/data-structures.md
index 470e05d..35e5d63 100644
--- a/docs/wiki_src/coding/data-structures.md
+++ b/docs/wiki_src/coding/data-structures.md
@@ -113,7 +113,7 @@ the list.
Strings are just a list of binary encoded bytes. You may use
[`std/List`](/std/List.bruijn.html) in combination with
-[`std/Number/Binary`](/std/Number/Binary.bruijn.html) to interact with
+[`std/Number/Binary`](/std/Number_Binary.bruijn.html) to interact with
them.
Example:
diff --git a/readme.md b/readme.md
index 89d7c77..5f3e350 100644
--- a/readme.md
+++ b/readme.md
@@ -1,5 +1,7 @@
<p align="center">
+
<img width="200" src="https://raw.githubusercontent.com/marvinborner/bruijn/main/docs/res/logo.png" alt="Bruijn logo"/>
+
</p>
> A purely functional programming language based on lambda calculus and
@@ -13,20 +15,34 @@ Code](https://rosettacode.org/wiki/Category:Bruijn).
## Features
-- **De Bruijn indices** eliminate the complexity of α-equivalence and
- α-conversion
-- **Call-by-need** reduction with great time/memory complexity by using
- the RKNL abstract machine (similar to
- [calm](https://github.com/marvinborner/calm/))
-- **Syntactic sugar** for unary/binary/ternary numerals and
- binary-encoded strings and chars
+- Substantial **standard library** with 700+ useful functions (see
+ `std/`)
- **No primitive functions** - every function is implemented in Bruijn
itself
-- Highly space-efficient compilation to **binary lambda calculus (BLC)**
- additionally to normal interpretation and REPL
+- 1:1 correspondence to lambda calculus (e.g. space-efficient
+ compilation to **binary lambda calculus (BLC)**)
+- **de Bruijn indices** instead of named variables
+- Lazy evaluation by default (**call-by-need** reduction)
+- **Syntactic sugar** makes writing terms simpler (e.g. numbers,
+ strings, chars, meta terms)
+- **Mixfix** and **prefix** operators
- **Recursion** can be implemented using combinators such as Y, Z or ω
-- Substantial **standard library** featuring many useful functions (see
- `std/`)
+
+## Why
+
+- By having a very small core (the reducer), bruijn is safe, consistent,
+ and (potentially) proven to be correct!
+- Since it doesn’t have builtin functions, bruijn is independent of
+ hardware internals and could easily be run on almost any architecture.
+- Compiled binary lambda calculus is incredibly expressive and tiny.
+ Read the articles by [Jart](https://justine.lol/lambda/#why) and
+ [Tromp](https://tromp.github.io/cl/cl.html).
+- Exploring different encodings of data as function abstractions is
+ really fascinating.
+- Naming parameters of functions is annoying. De Bruijn indices are a
+ universal reference independent of the function and can actually help
+ readability!
+- Really, just for fun.
## Wiki