pow [index (iterate (mul 0) (+1))] …**… pow :test ((+2) ** (+3) =? (+8)) (true)
Functional programming language based on pure de Bruijn indexed lambda calculus.
Lambdas all the way down.
No primitive functions.
> (+5) [[[[2 (2 (1 3))]]]] > 'a' [[[1 (0 (0 (0 (0 (1 (1 (0 2)))))))]]] > add [[(([([[1 0 [[0]]]] ((((0 [[(((0...
> :time factorial (+42) 0.01 seconds
Efficient reduction using abstract machines and higher-order encodings.
Substantial standard library.
Source
> ∏ (+1) → (+3) | ++‣ > number! <$> (lines "42\n25") > sum (take (+3) (repeat (+4))) > (+10b) ⋀! (+12b)
$ echo "main [0]" > echo.bruijn $ bruijn -b echo.bruijn > echo $ wc -c echo 2 echo $ echo "hello world!" | bruijn -e echo hello world!
Compilation to Tromp's binary
lambda calculus.
Support for byte and ASCII encoding.
Meta-programming
and self-interpretation.
> length factorial > !(swap ((+2u) (+3u))) > lhs (blc→meta "010000100000110")
$ git clone https://github.com/marvinborner/bruijn.git && cd bruijn $ stack run # for playing around $ stack install $ bruijn
$ ./broogle.sh -f add add ⧗ Unary → Unary → Unary also known as …+… in std/Number/Unary.bruijn:35 # adds two unary numbers ...