scala - 如何在 Scala 中通过函数式编程编写 sum 函数
问题描述
def f(x: Int): Int = x + 1
def sum1(n: Int): Int = {
var sum: Int = 0
for (i <- 1 to n) {
sum += i * f(i)
}
sum
}
val sum2: Int => Int = (n: Int) => (1 to n).reduce((x, y) => x * f(x) + y * f(y))
sum2 函数是错误的,但我想知道如何使用 reduce 或 fold 编写 sum1
解决方案
仅使用通常更安全,fold
因为边缘情况已经被烘焙到签名中,而reduce
在空列表上会失败(这就是为什么你需要从 0 而不是 1 开始)
这是一个完美的解决方案。然而,由于 Scala 是一种表达性语言,有很多方法可以达到相同的结果。例如,您还可以将计算f(x)
步骤与将所有事物相加的步骤分开,如下所示
(1 to n).map(x => x * f(x)).fold(0)(_ + _)
// or using sum like jwvh suggested
(1 to n).map(x => x * f(x)).sum
推荐阅读
- javascript - 付款成功后我想做点什么
- ios - 将桥接的 Swift 类型传递给期望 AnyObject 的泛型函数
- javascript - RSA 使用 Javascript 加密并使用公共密钥在 Java 中解密
- c# - 如何仅以编程方式突出显示行
- android - 如何在模拟器中模拟传入的语音(在电话中)
- mysql - Query builder proper sintax for 4 joins + 3 where clauses (Laravel5.7)
- powershell - Export-Csv 在导出其成员时不显示 AD 组名称
- macos - 如何在介子中为调试构建指定 rpath?
- docker - 服务发现不适用于 Route 53 和 ECS Nginx 容器托管 Angular 代码
- c# - 在运行时创建的方法会根据其运行方式更改另一个方法调用的参数顺序