這是我在Functional Programming in Scala的練習中爲Stream
類寫toList
的嘗試。Implementing Stream.toList
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)
}
在此基礎上post閱讀(但不理解所有的),我不能肯定,如果我的模式匹配是正確的。特別是,我擔心我的第一個案例導致立即評估流的尾部。
從概念上講,我認爲我需要實現toList
,其中每個遞歸步驟將流頭添加到列表中,而不是評估每個步驟的尾部。
我在這個理解和上面的實現中正確嗎?