我试图使用下面的代码中的高阶函数来计算假设List(1,2,3)的Scala列表中存在的元素的阶乘
object HigherOrderFunctionEg{
def main(args :Array[String]){
val input = args(0).toInt
val intiList :List[Int] = List.range(1,input+1)
def factorial(n: Int): Int = {
if (n == 0)
return 1
else
return n * factorial(n-1)
}
def myHigherOrderFn (factorial : Int => Unit, intiList : List[Int]) : Unit =
{
intiList.foreach(factorial)
println(intiList.foreach(factorial))
}
myHigherOrderFn(factorial, intiList)
}
}
当我尝试scala HigherOrderFunctionEg.scala 3时,我得到的输出仅是空括号(),正如我期望的那样 1个 2 6
答案 0 :(得分:3)
存在多个问题:
factorial
是Int => Int
,但您使用过Int => Unit
foreach
返回Unit
,因此打印结果将始终为()
myHigherOrderFun
返回Unit
,因此它实际上不是一个函数。这是一种更好的编写方式:
def myHigherOrderFn(factorial: Int => Int, intiList: List[Int]): List[Int] =
intiList.map(factorial)
myHigherOrderFn(factorial, intiList).foreach(println)
答案 1 :(得分:1)
问题在于阶乘的返回类型为Int => Unit
。应该是Int => Int
它需要一个整数并返回一个整数。
您需要像这样更改定义。
def myHigherOrderFn (factorial : Int => Int, intiList : List[Int]) : Unit =
intiList.foreach(e => println(factorial(e)))