12345678910111213141516171819202122232425262728293031323334353637 |
- #!/usr/bin/ruby
- #
- ## https://rosettacode.org/wiki/Generator/Exponential#Sidef
- #
- 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.
- { squares_without_cubes() } * 20
-
- # Print 10 values.
- var answer = []
- { answer.append(squares_without_cubes()) } * 10
- say answer
- assert_eq(answer, [529, 576, 625, 676, 784, 841, 900, 961, 1024, 1089]);
|