diff --git a/eBook/exercises/chapter_6/10to1_recursive.go b/eBook/exercises/chapter_6/10to1_recursive.go index fa0d40b..d05f55c 100755 --- a/eBook/exercises/chapter_6/10to1_recursive.go +++ b/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) -} \ No newline at end of file +package main + +import "fmt" + +func main() { + printrec(1) +} + +func printrec(i int) { + if i > 10 { + return + } + printrec(i + 1) + fmt.Printf("%d ", i) +} diff --git a/eBook/exercises/chapter_6/compose.go b/eBook/exercises/chapter_6/compose.go index dfaa491..33d7a60 100755 --- a/eBook/exercises/chapter_6/compose.go +++ b/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 +} diff --git a/eBook/exercises/chapter_6/error_returnval.go b/eBook/exercises/chapter_6/error_returnval.go index 6ef8cc7..fae77d1 100755 --- a/eBook/exercises/chapter_6/error_returnval.go +++ b/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 -2.23606797749979 -*/ +// 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 +2.23606797749979 +*/ diff --git a/eBook/exercises/chapter_6/factorial.go b/eBook/exercises/chapter_6/factorial.go index eeaac81..f96027b 100755 --- a/eBook/exercises/chapter_6/factorial.go +++ b/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! diff --git a/eBook/exercises/chapter_6/fibonacci2.go b/eBook/exercises/chapter_6/fibonacci2.go index 6fde9be..4216d7a 100755 --- a/eBook/exercises/chapter_6/fibonacci2.go +++ b/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 +} diff --git a/eBook/exercises/chapter_6/fibonacci_closure.go b/eBook/exercises/chapter_6/fibonacci_closure.go index cc29b96..4c21daf 100755 --- a/eBook/exercises/chapter_6/fibonacci_closure.go +++ b/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()) + } +} diff --git a/eBook/exercises/chapter_6/function_filter2.go b/eBook/exercises/chapter_6/function_filter2.go index 30a2dd7..6e73672 100755 --- a/eBook/exercises/chapter_6/function_filter2.go +++ b/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) +} + +/* + + */ diff --git a/eBook/exercises/chapter_6/lambda_value.go b/eBook/exercises/chapter_6/lambda_value.go index 0b0d803..1195b50 100755 --- a/eBook/exercises/chapter_6/lambda_value.go +++ b/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() -*/ \ No newline at end of file +// 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() +*/ diff --git a/eBook/exercises/chapter_6/mult_returnval.go b/eBook/exercises/chapter_6/mult_returnval.go index fbdde34..43fa36a 100755 --- a/eBook/exercises/chapter_6/mult_returnval.go +++ b/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 \ No newline at end of file +// 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 diff --git a/eBook/exercises/chapter_6/strings_map.go b/eBook/exercises/chapter_6/strings_map.go index ea82d8a..e241fb0 100755 --- a/eBook/exercises/chapter_6/strings_map.go +++ b/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 \ No newline at end of file +// 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 diff --git a/eBook/exercises/chapter_6/varargs.go b/eBook/exercises/chapter_6/varargs.go index 0c2eb70..28faf82 100755 --- a/eBook/exercises/chapter_6/varargs.go +++ b/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