Finish: 04-higher-order - 高阶函数

This commit is contained in:
2026-03-19 10:20:24 +08:00
parent 0e6a3b24f3
commit 95b45fb1b6
+23 -21
View File
@@ -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)