# 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); }