我试过这个 概率函数只返回列表的单个值而不是所有原因
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)
答案 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)