34 lines
845 B
Plaintext
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))
|