replace 235 with sieve - less problematic
add programs, not yet described, to demonstrate servers.
R=gri
DELTA=279 (177 added, 16 deleted, 86 changed)
OCL=15380
CL=15389
diff --git a/doc/progs/sieve1.go b/doc/progs/sieve1.go
new file mode 100644
index 0000000..2cb9060
--- /dev/null
+++ b/doc/progs/sieve1.go
@@ -0,0 +1,49 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+// Send the sequence 2, 3, 4, ... to returned channel
+func Generate() *chan int {
+ ch := new(chan int);
+ go func(ch *chan int){
+ for i := 2; ; i++ {
+ ch -< i
+ }
+ }(ch);
+ return ch;
+}
+
+// Filter out input values divisible by 'prime', send rest to returned channel
+func Filter(in *chan int, prime int) *chan int{
+ out := new(chan int);
+ go func(in *chan int, out *chan int, prime int) {
+ for {
+ if i := <-in; i % prime != 0 {
+ out -< i
+ }
+ }
+ }(in, out, prime);
+ return out;
+}
+
+func Sieve() *chan int {
+ out := new(chan int);
+ go func(out *chan int) {
+ ch := Generate();
+ for {
+ prime := <-ch;
+ out -< prime;
+ ch = Filter(ch, prime);
+ }
+ }(out);
+ return out;
+}
+
+func main() {
+ primes := Sieve();
+ for {
+ print(<-primes, "\n");
+ }
+}