55 lines
907 B
Tcl
55 lines
907 B
Tcl
#!/usr/bin/env tclsh
|
|
|
|
package require generator
|
|
|
|
generator define idx_range {n m} {
|
|
for {set i $n} {$i < [expr $m -1]} {incr i} { generator yield $i }
|
|
}
|
|
|
|
generator define mth_power {m} {
|
|
set n 0
|
|
while {1} {
|
|
generator yield [expr $n ** $m]
|
|
incr n
|
|
}
|
|
}
|
|
|
|
generator define squares {} {
|
|
|
|
generator for x [mth_power 2] {
|
|
generator yield $x
|
|
}
|
|
}
|
|
|
|
generator define cubes {} {
|
|
|
|
generator for x [mth_power 3] {
|
|
generator yield $x
|
|
}
|
|
}
|
|
|
|
set acc {} ; # accumulator
|
|
|
|
set comm {} ; # common result
|
|
|
|
set limit 50
|
|
|
|
# run both generators concurrently
|
|
|
|
generator foreach x [squares] y [cubes] {
|
|
|
|
lappend acc $y
|
|
|
|
if { ! [expr {$x in $acc}] } { lappend comm $x }
|
|
|
|
if { [llength $comm] > $limit } {break}
|
|
}
|
|
|
|
# elements 20.. 30
|
|
set results [lrange $comm 19 29] ; # list range
|
|
|
|
generator foreach idx [idx_range 20 30] {
|
|
set x [lindex $comm $idx]
|
|
puts "$x"
|
|
}
|