package main
+import "fmt"
+
// fib returns a function that returns
// successive Fibonacci numbers.
func fib() func() int {
func main() {
f := fib()
// Function calls are evaluated left-to-right.
- println(f(), f(), f(), f(), f())
+ fmt.Println(f(), f(), f(), f(), f())
}
package main
+import "fmt"
+
// Send the sequence 2, 3, 4, ... to channel 'ch'.
func Generate(ch chan<- int) {
for i := 2; ; i++ {
go Generate(ch) // Launch Generate goroutine.
for i := 0; i < 10; i++ {
prime := <-ch
- print(prime, "\n")
+ fmt.Println(prime)
ch1 := make(chan int)
go Filter(ch, ch1, prime)
ch = ch1
...........
`)
-// center is the position of the center hole if
+// center is the position of the center hole if
// there is a single one; otherwise it is -1.
var center int
var moves int // number of times move is called
-// move tests if there is a peg at position pos that
+// move tests if there is a peg at position pos that
// can jump over another peg in direction dir. If the
// move is valid, it is executed and move returns true.
// Otherwise, move returns false.
board[pos+2*dir] = '○'
}
-// solve tries to find a sequence of moves such that
-// there is only one peg left at the end; if center is
+// solve tries to find a sequence of moves such that
+// there is only one peg left at the end; if center is
// >= 0, that last peg must be in the center position.
// If a solution is found, solve prints the board after
-// each move in a backward fashion (i.e., the last
+// each move in a backward fashion (i.e., the last
// board position is printed first, all the way back to
// the starting board position).
func solve() bool {
// see if this new board has a solution
if solve() {
unmove(pos, dir)
- println(string(board))
+ fmt.Println(string(board))
return true
}
unmove(pos, dir)
// tried each possible move
if n == 1 && (center < 0 || last == center) {
// there's only one peg left
- println(string(board))
+ fmt.Println(string(board))
return true
}
// no solution found for this board
// express concurrent concepts, such as
// this binary tree comparison.
//
-// Trees may be of different shapes,
+// Trees may be of different shapes,
// but have the same contents. For example:
//
// 4 6
Right *Tree
}
-// Walk traverses a tree depth-first,
+// Walk traverses a tree depth-first,
// sending each Value on a channel.
func Walk(t *Tree, ch chan int) {
if t == nil {