scala函数只返回列表的单个值,但不返回所有值。为什么?

scala函数只返回列表的单个值,但不返回所有值。为什么?,scala,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]() va

我试过这个 概率函数只返回列表的单个值,但不返回所有值

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)

您正在初始化每个递归的列表:

var p=List[Double]()
因此,最终结果列表将只包含最后一个元素

我看不出递归的必要性,您可以映射它:

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

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

您正在初始化每个递归的列表:

var p=List[Double]()
因此,最终结果列表将只包含最后一个元素

我看不出递归的必要性,您可以映射它:

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

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

对你的方法有一些评论

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

此外,求和函数可以写得非常简单:

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)

对你的方法有一些评论

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

此外,求和函数可以写得非常简单:

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)

实际上不需要模式
匹配
。只需映射
列表
。如果它是空的,则返回该值。thanx出于考虑,不需要模式
匹配
。只需映射
列表
。如果它是空的,那就是返回的。thanx用于考虑thanx用于考虑thanx用于考虑thanx