scala函数只返回列表的单个值而不是全部为什么?

时间:2017-12-15 09:09:09

标签: scala

我试过这个 概率函数只返回列表的单个值而不是所有原因

var l=List(2.2,3.1)
def sum(xs: List[Double]): Double=
{
  if(xs.isEmpty) 0.0
  else xs.head+sum(xs.tail)
}
var s=sum(l)
def probability_calculation( xs: List[Double], s:Double): List[Double]=
{
  var p=List[Double]()
  var R=2
  if(xs.isEmpty) List()
  else
  {
    p=p:::List(xs.head*R/s)
    probability_calculation(xs.tail,s)
  }
  p
}

probability_calculation(l,s)

2 个答案:

答案 0 :(得分:1)

您在每次递归时重新初始化列表:

var p=List[Double]()

所以你的最终结果列表只包含最后一个元素。

我没有看到递归的必要性,你可以只映射它:

def probability_calculation(xs: List[Double], s: Double): List[Double] = {
  val R = 2

  xs.map(x => x * R / s)
}

答案 1 :(得分:1)

关于你的方法的一些评论!

尽量避免在函数中使用var,因为这正是您遇到的问题的根源!

此外,您的sum函数可以写成:

val sum = List(2.2, 3.1).foldLeft(0.0)(_ + _)

您的概率分布函数可写为:

def probCaclculation(xs: List[Double], s: Double): List[Double] = xs.map(x => x * 2 / s)