Files
lumen/examples/closures.lumen
T

34 lines
845 B
Plaintext

// Closures capturing mutable state, plus higher order functions.
fn makeCounter() {
var count = 0
fn increment() {
count = count + 1
return count
}
return increment
}
let counter = makeCounter()
println("counter: " + str(counter()) + " " + str(counter()) + " " + str(counter()))
fn makeAdder(amount) {
fn add(value) {
return value + amount
}
return add
}
let add10 = makeAdder(10)
let add100 = makeAdder(100)
println("add10(5) = " + str(add10(5)))
println("add100(5) = " + str(add100(5)))
let numbers = [1, 2, 3, 4, 5]
let doubled = map(fn(x) { return x * 2 }, numbers)
let evens = filter(fn(x) { return x % 2 == 0 }, numbers)
let total = reduce(fn(acc, x) { return acc + x }, numbers, 0)
println("doubled: " + str(doubled))
println("evens: " + str(evens))
println("sum: " + str(total))