这是我在 Scala的函数式编程练习中toList
为Stream
课程编写的尝试。
def toList[A](stream: Stream[A]): List[A] = {
def go(s: Stream[A], acc: List[A]): List[A] = s match {
case x #:: xs => go(xs, acc :+ x)
case _ => acc
}
go(stream, Nil)
}
根据对这篇文章的阅读(但不是全部理解) ,我不确定我的模式匹配是否正确。特别是,我担心我的第一个案例会导致立即评估流的尾部。
从概念上讲,我认为我需要实现toList
每个递归步骤将流的头部添加到列表的位置,而不是评估每个步骤的尾部。
我对这种理解和上述实现是否正确?