func gen_pow(m) { var e = 0; func { e++ ** m }; } func gen_filter(g1, g2) { var v2 = g2.run; func { loop { var v1 = g1.run; while (v1 > v2) { v2 = g2.run }; v1 == v2 || return v1; } } } # Create generators. var squares = gen_pow(2); var cubes = gen_pow(3); var squares_without_cubes = gen_filter(squares, cubes); # Drop 20 values. 20.times { squares_without_cubes() }; # Print 10 values. var answer = []; 10.times { answer.append(squares_without_cubes()) }; say answer;