Scala 为什么在这个递归函数中输出这些值?

Scala 为什么在这个递归函数中输出这些值?,scala,Scala,在下面的函数(在Scala工作表中运行)中,我为什么要接收sum(ys)的输出 如何计算值0、1、0等 def sum(xs: List[Int]): Int = xs match { case Nil => 0 case y :: ys => { println(sum(ys)) y + sum(ys) } } //> sum

在下面的函数(在Scala工作表中运行)中,我为什么要接收sum(ys)的输出

如何计算值0、1、0等

def sum(xs: List[Int]): Int = xs match {
    case Nil => 0
    case y :: ys => {
        println(sum(ys))
        y + sum(ys)
    }
  }                                               //> sum: (xs: List[Int])Int

  sum(List(3,4,5,1))                              //> 0
                                                  //| 1
                                                  //| 0
                                                  //| 6
                                                  //| 0
                                                  //| 1
                                                  //| 0
                                                  //| 10
                                                  //| 0
                                                  //| 1
                                                  //| 0
                                                  //| 6
                                                  //| 0
                                                  //| 1
                                                  //| 0

要了解发生了什么,请将您的案例陈述更改为:

case y :: ys => {
    println("y: " + y + "\tys: " + ys + "\tsum(ys):" + sum(ys))
    y + sum(ys)
}
您将获得以下输出:

scala> sum(List(3,4,5,1)) 
y: 1    ys: List()      sum(ys):0
y: 5    ys: List(1)     sum(ys):1
y: 1    ys: List()      sum(ys):0
y: 4    ys: List(5,1)   sum(ys):6
y: 1    ys: List()      sum(ys):0
y: 5    ys: List(1)     sum(ys):1
y: 1    ys: List()      sum(ys):0
y: 3    ys: List(4,5,1) sum(ys):10
y: 1    ys: List()      sum(ys):0
y: 5    ys: List(1)     sum(ys):1
y: 1    ys: List()      sum(ys):0
y: 4    ys: List(5,1)   sum(ys):6
y: 1    ys: List()      sum(ys):0
y: 5    ys: List(1)     sum(ys):1
y: 1    ys: List()      sum(ys):0
res0: Int = 13
您可以看到,调用空列表上的
sum(ys)
会产生零个条目。请注意,您的结果是13

// Assign the result to a val
val result = sum(List(3,4,5,1))