A-M baby
This commit is contained in:
parent
764da6cbbb
commit
db842d013d
19005 changed files with 197040 additions and 7 deletions
48
Task/Generator-Exponential/Go/generator-exponential-2.go
Normal file
48
Task/Generator-Exponential/Go/generator-exponential-2.go
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
)
|
||||
|
||||
func newPowGen(e float64) chan float64 {
|
||||
ch := make(chan float64)
|
||||
go func() {
|
||||
for i := 0.; ; i++ {
|
||||
ch <- math.Pow(i, e)
|
||||
}
|
||||
}()
|
||||
return ch
|
||||
}
|
||||
|
||||
// given two input channels, a and b, both known to return monotonically
|
||||
// increasing values, supply on channel c values of a not returned by b.
|
||||
func newMonoIncA_NotMonoIncB_Gen(a, b chan float64) chan float64 {
|
||||
ch := make(chan float64)
|
||||
go func() {
|
||||
for va, vb := <-a, <-b; ; {
|
||||
switch {
|
||||
case va < vb:
|
||||
ch <- va
|
||||
fallthrough
|
||||
case va == vb:
|
||||
va = <-a
|
||||
default:
|
||||
vb = <-b
|
||||
|
||||
}
|
||||
}
|
||||
}()
|
||||
return ch
|
||||
}
|
||||
|
||||
func main() {
|
||||
ch := newMonoIncA_NotMonoIncB_Gen(newPowGen(2), newPowGen(3))
|
||||
for i := 0; i < 20; i++ {
|
||||
<-ch
|
||||
}
|
||||
for i := 0; i < 10; i++ {
|
||||
fmt.Print(<-ch, " ")
|
||||
}
|
||||
fmt.Println()
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue