クラスのために書くための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
、各再帰ステップがストリームのヘッドをリストに追加する場所を実装する必要があると思います。
この理解と上記の実装は正しいですか?