3-17.【函数式编程】将以下函数转换为 Point-Free 风格

2 阅读1分钟

1️⃣ 原始函数

func incrementThenDouble(_ x: Int) -> Int {
    return (x + 1) * 2
}
  • 输入:x
  • 输出:(x + 1) * 2
  • 普通写法显式使用参数 x

2️⃣ 分解为小函数

先把函数拆成两个小函数:

func increment(_ x: Int) -> Int { x + 1 }
func double(_ x: Int) -> Int { x * 2 }

3️⃣ 使用函数组合

在 Swift 中没有内置函数组合运算符,但我们可以自己写一个简单的组合函数:

func compose<A, B, C>(_ f: @escaping (B) -> C,
                       _ g: @escaping (A) -> B) -> (A) -> C {
    return { a in f(g(a)) }
}
  • compose(f, g)(x) = f(g(x))

4️⃣ 转换为 Point-Free

let incrementThenDouble = compose(double, increment)
  • 不再显式使用参数
  • 输入 x,输出 (x + 1) * 2
  • 调用示例:
let result = incrementThenDouble(3) // (3 + 1) * 2 = 8
print(result) // 8

5️⃣ 总结

  • 原函数:显式提及参数 x
  • Point-Free:通过函数组合 compose(double, increment),不显式提及参数
  • 优势:逻辑清晰、可组合、复用性高