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