Browse Source

fix: coding style and file format for chapter 6.

Bo-Yi Wu 9 years ago
parent
commit
72c3839734

+ 15 - 13
eBook/exercises/chapter_6/10to1_recursive.go

@@ -1,13 +1,15 @@
-package main
-
-import "fmt"
-
-func main() {
-	printrec(1)
-}
-
-func printrec(i int) {
-	if i>10 { return }
-	printrec(i+1)
-	fmt.Printf("%d ", i)
-}
+package main
+
+import "fmt"
+
+func main() {
+	printrec(1)
+}
+
+func printrec(i int) {
+	if i > 10 {
+		return
+	}
+	printrec(i + 1)
+	fmt.Printf("%d ", i)
+}

+ 17 - 17
eBook/exercises/chapter_6/compose.go

@@ -1,17 +1,17 @@
-// compose.go
-package main
-
-import (
-	"fmt"
-	"math"
-)
-
-func Compose(f, g func(x float64) float64) func(x float64) float64 {
-	return func(x float64) float64 { // closure
-		return f(g(x))
-	}
-}
-
-func main() {
-	fmt.Print(Compose(math.Sin, math.Cos)(0.5)) // output: 0.7691963548410085
-}
+// compose.go
+package main
+
+import (
+	"fmt"
+	"math"
+)
+
+func Compose(f, g func(x float64) float64) func(x float64) float64 {
+	return func(x float64) float64 { // closure
+		return f(g(x))
+	}
+}
+
+func main() {
+	fmt.Print(Compose(math.Sin, math.Cos)(0.5)) // output: 0.7691963548410085
+}

+ 57 - 56
eBook/exercises/chapter_6/error_returnval.go

@@ -1,56 +1,57 @@
-// error_returnval.go
-package main
-
-import (
-	"errors"
-    "fmt"
-    "math"
-)
-
-func main() { 
-    fmt.Print("First example with -1: ")
-    ret1, err1 := MySqrt(-1)
-    if err1 != nil {
-        fmt.Println("Error! Return values are: ", ret1, err1)
-    } else {
-        fmt.Println("It's ok! Return values are: ", ret1, err1)
-    }
-
-    fmt.Print("Second example with 5: ")
-    //you could also write it like this
-    if ret2, err2 := MySqrt(5); err2 != nil {
-        fmt.Println("Error! Return values are: ", ret2, err2)
-    } else {
-        fmt.Println("It's ok! Return values are: ", ret2, err2) 
-    }
-	// named return variables:
-	fmt.Println(MySqrt2(5))
-}
-
-func MySqrt(f float64) (float64, error) {
-    //return an error as second parameter if invalid input
-    if (f < 0) {
-        return float64(math.NaN()), errors.New("I won't be able to do a sqrt of negative number!")
-    }
-    //otherwise use default square root function
-    return math.Sqrt(f), nil
-}
-
-//name the return variables - by default it will have 'zero-ed' values i.e. numbers are 0, string is empty, etc.
-func MySqrt2(f float64) (ret float64, err error) {
-    if (f < 0) {
-        //then you can use those variables in code
-        ret = float64(math.NaN())
-        err = errors.New("I won't be able to do a sqrt of negative number!")
-    } else {
-        ret = math.Sqrt(f)
-        //err is not assigned, so it gets default value nil
-    }
-    //automatically return the named return variables ret and err
-    return
-}
-/* Output:
-First example with -1: Error! Return values are: NaN I won't be able to do a sqrt of negative number!
-Second example with 5: It's ok! Return values are: 2.23606797749979 <nil>
-2.23606797749979 <nil>
-*/
+// error_returnval.go
+package main
+
+import (
+	"errors"
+	"fmt"
+	"math"
+)
+
+func main() {
+	fmt.Print("First example with -1: ")
+	ret1, err1 := MySqrt(-1)
+	if err1 != nil {
+		fmt.Println("Error! Return values are: ", ret1, err1)
+	} else {
+		fmt.Println("It's ok! Return values are: ", ret1, err1)
+	}
+
+	fmt.Print("Second example with 5: ")
+	//you could also write it like this
+	if ret2, err2 := MySqrt(5); err2 != nil {
+		fmt.Println("Error! Return values are: ", ret2, err2)
+	} else {
+		fmt.Println("It's ok! Return values are: ", ret2, err2)
+	}
+	// named return variables:
+	fmt.Println(MySqrt2(5))
+}
+
+func MySqrt(f float64) (float64, error) {
+	//return an error as second parameter if invalid input
+	if f < 0 {
+		return float64(math.NaN()), errors.New("I won't be able to do a sqrt of negative number!")
+	}
+	//otherwise use default square root function
+	return math.Sqrt(f), nil
+}
+
+//name the return variables - by default it will have 'zero-ed' values i.e. numbers are 0, string is empty, etc.
+func MySqrt2(f float64) (ret float64, err error) {
+	if f < 0 {
+		//then you can use those variables in code
+		ret = float64(math.NaN())
+		err = errors.New("I won't be able to do a sqrt of negative number!")
+	} else {
+		ret = math.Sqrt(f)
+		//err is not assigned, so it gets default value nil
+	}
+	//automatically return the named return variables ret and err
+	return
+}
+
+/* Output:
+First example with -1: Error! Return values are: NaN I won't be able to do a sqrt of negative number!
+Second example with 5: It's ok! Return values are: 2.23606797749979 <nil>
+2.23606797749979 <nil>
+*/

+ 34 - 34
eBook/exercises/chapter_6/factorial.go

@@ -1,34 +1,34 @@
-// factorial.go
-package main
-
-import (
-	"fmt"
-)
-
-func main() {
-	for i := uint64(0); i < uint64(30); i++ {
-		fmt.Printf("Factorial of %d is %d\n", i, Factorial(i))
-	}
-}
-
-/* unnamed return variables:
-func Factorial(n uint64) uint64 {
-	if n > 0 {
-		return n * Factorial(n-1)
-	}
-	return 1
-}
-*/
-
-// named return variables:
-func Factorial(n uint64) (fac uint64) {
-	fac = 1
-	if n > 0 {
-		fac = n * Factorial(n-1)
-		return
-	}
-	return
-}
-
-// int: correct results till 12!
-// uint64: correct results till 21!
+// factorial.go
+package main
+
+import (
+	"fmt"
+)
+
+func main() {
+	for i := uint64(0); i < uint64(30); i++ {
+		fmt.Printf("Factorial of %d is %d\n", i, Factorial(i))
+	}
+}
+
+/* unnamed return variables:
+func Factorial(n uint64) uint64 {
+	if n > 0 {
+		return n * Factorial(n-1)
+	}
+	return 1
+}
+*/
+
+// named return variables:
+func Factorial(n uint64) (fac uint64) {
+	fac = 1
+	if n > 0 {
+		fac = n * Factorial(n-1)
+		return
+	}
+	return
+}
+
+// int: correct results till 12!
+// uint64: correct results till 21!

+ 24 - 24
eBook/exercises/chapter_6/fibonacci2.go

@@ -1,24 +1,24 @@
-package main
-
-import "fmt"
-
-func main() {
-	pos := 4
-	result, pos := fibonacci(pos) 
-	fmt.Printf("the %d-th fibonacci number is: %d\n", pos, result)
-	pos = 10
-	result, pos = fibonacci(pos) 
-	fmt.Printf("the %d-th fibonacci number is: %d\n", pos, result)
-}
-
-func fibonacci(n int) (val, pos int) {
-	if n <= 1 {
-		val = 1
-	} else {
-		v1, _ := fibonacci(n-1)
-		v2, _ := fibonacci(n-2)
-		val =  v1 + v2
-	}
-	pos = n
-	return
-}
+package main
+
+import "fmt"
+
+func main() {
+	pos := 4
+	result, pos := fibonacci(pos)
+	fmt.Printf("the %d-th fibonacci number is: %d\n", pos, result)
+	pos = 10
+	result, pos = fibonacci(pos)
+	fmt.Printf("the %d-th fibonacci number is: %d\n", pos, result)
+}
+
+func fibonacci(n int) (val, pos int) {
+	if n <= 1 {
+		val = 1
+	} else {
+		v1, _ := fibonacci(n - 1)
+		v2, _ := fibonacci(n - 2)
+		val = v1 + v2
+	}
+	pos = n
+	return
+}

+ 20 - 20
eBook/exercises/chapter_6/fibonacci_closure.go

@@ -1,20 +1,20 @@
-package main
-
-// fib returns a function that returns
-// successive Fibonacci numbers.
-func fib() func() int {
-	a, b := 1, 1
-	return func() int {
-		a, b = b, a+b
-		return b
-	}
-}
-
-func main() {
-	f := fib()
-	// Function calls are evaluated left-to-right.
-	// println(f(), f(), f(), f(), f())
-	for i:=0; i<=9; i++ {
-		println(i+2, f() )
-	}
-}
+package main
+
+// fib returns a function that returns
+// successive Fibonacci numbers.
+func fib() func() int {
+	a, b := 1, 1
+	return func() int {
+		a, b = b, a+b
+		return b
+	}
+}
+
+func main() {
+	f := fib()
+	// Function calls are evaluated left-to-right.
+	// println(f(), f(), f(), f(), f())
+	for i := 0; i <= 9; i++ {
+		println(i+2, f())
+	}
+}

+ 37 - 37
eBook/exercises/chapter_6/function_filter2.go

@@ -1,37 +1,37 @@
-// function_filter2.go
-package main
-
-import "fmt"
-
-type flt func(int) bool
-
-// func isEven(n int) bool { if n%2 == 0 { return true }; return false }
-func isEven(n int) bool {
-	if n%2 == 0 {
-		return true
-	}
-	return false
-}
-
-func filter(sl []int, f flt) (yes, no []int) {
-	for _, val := range sl {
-		if f(val) {
-			yes = append(yes, val)
-		} else {
-			no = append(no, val)
-		}
-	}
-	return
-}
-
-func main() {
-	slice := []int{1, 2, 3, 4, 5, 7}
-	fmt.Println("slice = ", slice)
-	even, odd := filter(slice, isEven)
-	fmt.Println("The even elements of slice are: ", even)
-	fmt.Println("The odd elements of slice are: ", odd)
-}
-
-/*
-
-*/
+// function_filter2.go
+package main
+
+import "fmt"
+
+type flt func(int) bool
+
+// func isEven(n int) bool { if n%2 == 0 { return true }; return false }
+func isEven(n int) bool {
+	if n%2 == 0 {
+		return true
+	}
+	return false
+}
+
+func filter(sl []int, f flt) (yes, no []int) {
+	for _, val := range sl {
+		if f(val) {
+			yes = append(yes, val)
+		} else {
+			no = append(no, val)
+		}
+	}
+	return
+}
+
+func main() {
+	slice := []int{1, 2, 3, 4, 5, 7}
+	fmt.Println("slice = ", slice)
+	even, odd := filter(slice, isEven)
+	fmt.Println("The even elements of slice are: ", even)
+	fmt.Println("The odd elements of slice are: ", odd)
+}
+
+/*
+
+ */

+ 19 - 18
eBook/exercises/chapter_6/lambda_value.go

@@ -1,18 +1,19 @@
-// lambda_value.go
-package main
-
-import (
-	"fmt"
-)
-
-func main() {
-	fv := func() {
-		fmt.Println("Hello World!")
-	}
-	fv()
-	fmt.Printf("The type of fv is %T", fv)
-}
-/* Output:
-Hello World!
-The type of fv is func()
-*/
+// lambda_value.go
+package main
+
+import (
+	"fmt"
+)
+
+func main() {
+	fv := func() {
+		fmt.Println("Hello World!")
+	}
+	fv()
+	fmt.Printf("The type of fv is %T", fv)
+}
+
+/* Output:
+Hello World!
+The type of fv is func()
+*/

+ 25 - 24
eBook/exercises/chapter_6/mult_returnval.go

@@ -1,24 +1,25 @@
-// mult_returnval.go
-package main
-
-import (
-    "fmt"
-)
-
-func SumProductDiff(i, j int) (int, int, int) {
-    return i+j, i*j, i-j
-}
-
-func SumProductDiffN(i, j int) (s int, p int, d int) {
-	s, p, d = i+j, i*j, i-j
-    return 
-}
-
-func main() { 
-    sum, prod, diff := SumProductDiff(3,4)
-    fmt.Println("Sum:", sum, "| Product:",prod, "| Diff:", diff)
- 	sum, prod, diff = SumProductDiffN(3,4)
-    fmt.Println("Sum:", sum, "| Product:",prod, "| Diff:", diff)
-}
-// Sum: 7 | Product: 12 | Diff: -1
-// Sum: 7 | Product: 12 | Diff: -1
+// mult_returnval.go
+package main
+
+import (
+	"fmt"
+)
+
+func SumProductDiff(i, j int) (int, int, int) {
+	return i + j, i * j, i - j
+}
+
+func SumProductDiffN(i, j int) (s int, p int, d int) {
+	s, p, d = i+j, i*j, i-j
+	return
+}
+
+func main() {
+	sum, prod, diff := SumProductDiff(3, 4)
+	fmt.Println("Sum:", sum, "| Product:", prod, "| Diff:", diff)
+	sum, prod, diff = SumProductDiffN(3, 4)
+	fmt.Println("Sum:", sum, "| Product:", prod, "| Diff:", diff)
+}
+
+// Sum: 7 | Product: 12 | Diff: -1
+// Sum: 7 | Product: 12 | Diff: -1

+ 19 - 13
eBook/exercises/chapter_6/strings_map.go

@@ -1,13 +1,19 @@
-// strings_map.go
-package main
-
-import (
-	"fmt"
-	"strings"
-)
-
-func main() {
-	asciiOnly := func(c rune) rune { if c > 127 { return ' ' }; return c }
-	fmt.Println(strings.Map(asciiOnly, "Jérôme Österreich"))
-}
-// J r me  sterreich
+// strings_map.go
+package main
+
+import (
+	"fmt"
+	"strings"
+)
+
+func main() {
+	asciiOnly := func(c rune) rune {
+		if c > 127 {
+			return ' '
+		}
+		return c
+	}
+	fmt.Println(strings.Map(asciiOnly, "Jérôme Österreich"))
+}
+
+// J r me  sterreich

+ 23 - 23
eBook/exercises/chapter_6/varargs.go

@@ -1,23 +1,23 @@
-// Q10_varargs.go
-package main
-
-import (
-	"fmt"
-)
-
-func main() {
-	printInts()
-	println()
-	printInts(2, 3)
-	println()
-	printInts(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
-}
-
-func printInts(list ...int) {
-//	for i:=0; i<len(list); i++ {
-//		fmt.Printf("%d\n", list[i])
-//	}
-	for _, v := range list {
-		fmt.Printf("%d\n", v)
-	}
-}
+// Q10_varargs.go
+package main
+
+import (
+	"fmt"
+)
+
+func main() {
+	printInts()
+	println()
+	printInts(2, 3)
+	println()
+	printInts(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
+}
+
+func printInts(list ...int) {
+	//	for i:=0; i<len(list); i++ {
+	//		fmt.Printf("%d\n", list[i])
+	//	}
+	for _, v := range list {
+		fmt.Printf("%d\n", v)
+	}
+}