Scala 仅从1个元素生成递归流?

Scala 仅从1个元素生成递归流?,scala,recursion,stream,Scala,Recursion,Stream,我制作了一个使用递归的流,如下所示: val gray: Stream[List[String]] = { List("") #:: List("0", "1") #:: gray.tail.map {gnext} } 在哪里 比如说 scala> gray(2) res17: List[String] = List(00, 01, 11, 10) 我并不需要定义中的列表(“0”,“1”),因为它可以从元素0生成: scala> gnext(List("")) res18:

我制作了一个使用递归的流,如下所示:

val gray: Stream[List[String]] = {
 List("") #:: List("0", "1") #:: gray.tail.map {gnext} 
}
在哪里

比如说

scala> gray(2)
res17: List[String] = List(00, 01, 11, 10)
我并不需要定义中的列表(“0”,“1”),因为它可以从元素0生成:

scala> gnext(List(""))
res18: List[java.lang.String] = List(0, 1)
那么,是否有一种方法/模式可以用于从第一个元素生成流

val gray: Stream[List[String]] = List("") #:: gray.map {gnext}
或者,或者

val gray = Stream.iterate(List(""))(gnext)

酷,只需使用整个列表而不是尾部。我说的第一个版本会被记忆,但是带有
iterate
的版本不会吗?@Luigi note
gray
是一个函数,所以我认为记忆不适用。很好的一点——它们都是流对象。据我所知,
Stream
s是懒惰的
List
s,因此如果我在一个新的
gray
对象上引用
gray(10)
,它将花费很长时间,但是如果我引用
gray(8)
它将是即时的,因为该值已经计算过了。所以这就像是自动记忆。
val gray = Stream.iterate(List(""))(gnext)