我很难理解为什么这段代码不起作用。我有一个多项式1 + 3x + 2x ^ 2,我表示为一个列表(1.0,3.0,2.0)。为了避免将带小数的数字加电到高索引,我按如下方式评估多项式: 1 + x(3 + x(2))
对于更高的多项式,它将是a0 + x(a1 + x(a2 + x(a3 + ...)))...)
这可以方便地从右到左进行评估,虽然我可以轻松地编写一个循环,但我认为Scala的折叠运算符可能很有用。所以我在Scala提示符上尝试了这个但得到了错误的答案(应该是28.0)
scala> List(1.0, 3.0, 2.0).tail.foldRight(0.0)((a,x) => 3.0 * a + x)
res53: Double = 15.0
以下是我对折叠计算的预期:
3 * 0 + 2 = 2
3 * 2 + 3 = 9
3 * 9 + 1 = 28
我是否误解了折叠操作符,还是我错过了一些微不足道的东西?谢谢!
编辑;得到了它:
scala> List(1.0, 3.0, 2.0).foldRight(0.0)((a,x) => 3.0 * x + a)
res68: Double = 28.0
答案 0 :(得分:3)
使用tail
不会按照您在上述步骤中描述的内容进行折叠,因为它会跳过1.0
。另外,交换参数x
和a
。
scala> List(1.0, 3.0, 2.0).foldRight(0.0)((x,a) => 3.0 * a + x)
res34: Double = 28.0