Renderingla

clausa

Closure and lambda expressions with inferred or annotated types.

Aliases: lambda, closure

Syntax: <params> ∴ <expression> | (<params>) → <type> ∴ <expression>

Category

function

Related

Examples

examples/corpus/clausa/clausa.fab (canonical · keyword)

Closure and lambda expressions with inferred or annotated types.

# clausa — closure / lambda expressions
#
# <params> ∴ <expr>
# (<params>) → <typus> ∴ <expr>
#
# GRAMMAR:
#   closureExpr :← paramList '∴' expr | '(' paramList ')' '→' type '∴' expr
#
# EXPECTED OUTPUT:
#   clausa.expected

incipit {
    # Single-parameter closure: numerus x ∴ x * 2
    fixum _ duplica ← numerus x ∴ x * 2
    nota duplica(5)

    # Multi-parameter typed closure
    fixum _ adde ← (numerus a, numerus b) → numerus ∴ a + b
    nota adde(3, 4)

    fixum _ numeri ← [1, 2, 3]
    varia lista<numerus> duplicati ← vacua
    # predicate closure
    fixum _ par ← numerus x → bivalens ∴ x % 2 ≡ 0
    varia lista<numerus> pares ← vacua
    itera ex numeri fixum n {
        duplicati.appende(duplica(n))
        si par(n) {
            pares.appende(n)
        }
    }
    nota duplicati.longitudo()
    nota duplicati[0]
    nota duplicati[2]
    nota pares.longitudo()
    nota pares[0]

    fixum _ positivus ← numerus n → bivalens ∴ n > 0
    nota positivus(10)
    nota positivus(-5)
}

Expected output:

10
7
3
2
6
1
2
verum
falsum