complexpr/examples/iterator.cxpr
2022-09-13 13:31:29 -04:00

37 lines
820 B
Text

# this function returns an iterator when called
fn count_by(delta, limit) {
let counter = 0;
return fn() {
if counter >= limit {
return nil;
}
let prev_value = counter;
counter += delta;
return prev_value;
};
}
# counter is an iterator
# iterators are functions that:
# - take no arguments
# - return nil once done
# - once returned nil once, must do so for all subsequent calls
# the interpreter only checks the first requirement
let counter = count_by(2, 5);
println(counter()); # 0
println(counter()); # 2
println(counter()); # 4
# println(counter()); # nil
# println(counter()); # nil
println("counting by 3s up to 20:");
for n: count_by(3, 20) {
println(n);
}
println("counting by 7s up to 40:");
for n: count_by(7, 40) {
println(n);
}