Lambda Discipline

Examples

Let expressions

tests/golden/programs/let_expressions.lbd

-- `let` is recursive and generalized.
result : Number =
    let square = \x. (mul x x) in
    let total = (add (square 3) (square 4)) in
    (sqrt total)

pairs : List<String> =
    let id = \x. x in
    [(id "polymorphic"), (show (id 1))]

collatz : Number -> Number = \start.
    let go = \n. \steps.
        (if (eq n 1) steps
            (go (if (eq (mod n 2) 0) (div n 2) (add (mul 3 n) 1)) (add steps 1)))
    in (go start 0)

(println result)
(println pairs)
(println (collatz 27))

Output

5
["polymorphic", "1"]
111

Run it yourself from the repository root: lbd run tests/golden/programs/let_expressions.lbd