Generator/Exponential: Difference between revisions

add E example
m (→‎{{header|J}}: add whitespace)
(add E example)
Line 15:
'''See also'''
* [[wp:Generator (computer_science)|Generator]]
 
=={{header|E}}==
 
E does not provide coroutines on the principle that interleaving of execution of code should be explicit to avoid unexpected interactions. However, this problem does not especially require them. Each generator here is simply a function that returns the next value in the sequence when called.
 
<lang e>def genPowers(exponent) {
var i := -1
return def powerGenerator() {
return (i += 1) ** exponent
}
}
 
def filtered(source, filter) {
var fval := filter()
return def filterGenerator() {
while (true) {
def sval := source()
while (sval > fval) {
fval := filter()
}
if (sval < fval) {
return sval
}
}
}
}
 
def drop(n, gen) {
for _ in 1..n { gen() }
}
 
 
def squares := genPowers(2)
def cubes := genPowers(3)
def squaresNotCubes := filtered(squares, cubes)
drop(20, squaresNotCubes)
for _ in 1..10 {
print(`${squaresNotCubes()} `)
}
println()</lang>
 
=={{header|Haskell}}==