Finish: 04-higher-order - 高阶函数
This commit is contained in:
@@ -8,9 +8,9 @@ func exercise1(apply func(int) int, value int) int {
|
|||||||
// 接收一个函数apply和一个值value
|
// 接收一个函数apply和一个值value
|
||||||
// 调用apply函数处理value并返回结果
|
// 调用apply函数处理value并返回结果
|
||||||
|
|
||||||
result := ____
|
result := apply(value)
|
||||||
|
|
||||||
return ____
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
func exercise2() func(int) int {
|
func exercise2() func(int) int {
|
||||||
@@ -19,7 +19,9 @@ func exercise2() func(int) int {
|
|||||||
// 返回一个函数,该函数将输入值乘以2
|
// 返回一个函数,该函数将输入值乘以2
|
||||||
// 提示:返回一个匿名函数
|
// 提示:返回一个匿名函数
|
||||||
|
|
||||||
return ____
|
return func(x int) int {
|
||||||
|
return x * 2
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func exercise3(vals []int, filter func(int) bool) []int {
|
func exercise3(vals []int, filter func(int) bool) []int {
|
||||||
@@ -28,15 +30,15 @@ func exercise3(vals []int, filter func(int) bool) []int {
|
|||||||
// 接收一个int切片和一个过滤函数
|
// 接收一个int切片和一个过滤函数
|
||||||
// 返回过滤后的切片(只保留满足条件的元素)
|
// 返回过滤后的切片(只保留满足条件的元素)
|
||||||
|
|
||||||
var result ____
|
var result []int
|
||||||
|
|
||||||
for _, val := range ____ {
|
for _, val := range vals {
|
||||||
if ____(val) {
|
if filter(val) {
|
||||||
result = append(result, ____)
|
result = append(result, val)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ____
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
func exercise4(vals []int, mapper func(int) int) []int {
|
func exercise4(vals []int, mapper func(int) int) []int {
|
||||||
@@ -45,13 +47,13 @@ func exercise4(vals []int, mapper func(int) int) []int {
|
|||||||
// 接收一个int切片和一个映射函数
|
// 接收一个int切片和一个映射函数
|
||||||
// 返回映射后的切片(每个元素都经过mapper函数处理)
|
// 返回映射后的切片(每个元素都经过mapper函数处理)
|
||||||
|
|
||||||
result := make([]int, ____)
|
result := make([]int, len(vals))
|
||||||
|
|
||||||
for i, val := range ____ {
|
for i, val := range vals {
|
||||||
result[i] = ____(val)
|
result[i] = mapper(val)
|
||||||
}
|
}
|
||||||
|
|
||||||
return ____
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
func exercise5(vals []int, reducer func(int, int) int, initial int) int {
|
func exercise5(vals []int, reducer func(int, int) int, initial int) int {
|
||||||
@@ -61,13 +63,13 @@ func exercise5(vals []int, reducer func(int, int) int, initial int) int {
|
|||||||
// 返回归约结果
|
// 返回归约结果
|
||||||
// 例如:对切片求和、求积等
|
// 例如:对切片求和、求积等
|
||||||
|
|
||||||
result := ____
|
result := initial
|
||||||
|
|
||||||
for _, val := range ____ {
|
for _, val := range vals {
|
||||||
result = ____(result, val)
|
result = reducer(result, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
return ____
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
func exercise6() int {
|
func exercise6() int {
|
||||||
@@ -79,18 +81,18 @@ func exercise6() int {
|
|||||||
// 返回 double(square(3)) 的结果
|
// 返回 double(square(3)) 的结果
|
||||||
// 即:先平方(9),再双倍(18)
|
// 即:先平方(9),再双倍(18)
|
||||||
|
|
||||||
square := func(n int) int { return ____ }
|
square := func(n int) int { return n * n }
|
||||||
double := func(n int) int { return ____ }
|
double := func(n int) int { return n * 2 }
|
||||||
|
|
||||||
compose := func(f, g func(int) int, x int) int {
|
compose := func(f, g func(int) int, x int) int {
|
||||||
return ____(____(x))
|
return g(f(x))
|
||||||
}
|
}
|
||||||
|
|
||||||
return compose(____, ____, 3)
|
return compose(square, double, 3)
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
fmt.Println("=== 高阶函数 练习 ===\n")
|
fmt.Println("=== 高阶函数 练习 ===")
|
||||||
|
|
||||||
平方 := func(n int) int { return n * n }
|
平方 := func(n int) int { return n * n }
|
||||||
result1 := exercise1(平方, 4)
|
result1 := exercise1(平方, 4)
|
||||||
|
|||||||
Reference in New Issue
Block a user