我们正在尝试使用Scala中的并行集合,并想检查结果是否有序。为此,我在REPL上编写了一个小函数来检查我们生成的非常大的列表是否有序:
def isOrdered(l:List[Int]):Boolean = { l match {
case Nil => true
case x::Nil => true
case x::y::Nil => x>y
case x::y::tail => x>y & isOrdered(tail)
}
}
这段代码出现了栈溢出错误(在这里提问非常恰当!)。我本以为它是尾递归优化的。那么出了什么问题呢?
case x::y::Nil
是多余的,并且您的case x::y::tail
有错误(考虑List(3,2,9)
)。 - dave4420