在Scala

时间:2016-04-18 02:45:39

标签: list scala

我想在Scala中编写一个函数,它接受两个整数,并在这两个整数的包含范围内对每个值的立方数求和。

例如,我打电话给:

sumCubes(0,2)

我必须得到 9 的结果,因为(0 ^ 3 + 1 ^ 3 + 2 ^ 3)= 9。

我必须使用range方法并考虑此模板:

def sumCubes2(x: Int, y: Int)= {
@annotation.tailrec
def fAux(acc: Int,xs: List[Int]): Int= ???
???
}

我考虑过创建一个列表,其中包含两个整数范围内的元素和另一个包含最终结果的变量:

var rangeList = List.range(x, y)
var finalValue = 0

现在我不知道是否应该使用for循环或以某种方式递归调用函数fAux。

2 个答案:

答案 0 :(得分:4)

可以使用您的模板完成:

(x to y).fold(0){case (a,b) => a + b*b*b}

但这更有意义:

d = {}
with open('file.txt') as file:    
    for line in file.readlines():
        key, value = line.split()
        d[key] = int(value)
print(d)

答案 1 :(得分:1)

怎么做呢,无论如何我都不知道map函数是否针对tail recursion进行了优化:

(a to b).map(x=>x*x*x).sum


scala> (0 to 2).map(x=>x*x*x).sum
res160: Int = 9

scala> (2 to 5).map(x=>x*x*x).sum
res161: Int = 224

scala>