从1个元素创建一个递归流?

时间:2011-07-02 23:09:34

标签: scala recursion stream

我使用递归为Gray Codes创建了一个Stream,如下所示:

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

,其中

val gnext = (i:List[String]) => i.map {"0" + _} ::: i.reverse.map {"1" + _}

所以,例如

scala> gray(2)
res17: List[String] = List(00, 01, 11, 10)

我不需要定义中的List(“0”,“1”),因为它可以从元素0生成:

scala> gnext(List(""))
res18: List[java.lang.String] = List(0, 1)

那么有没有一种方法/模式可用于从第一个元素生成Stream?

1 个答案:

答案 0 :(得分:3)

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

或者,或者,

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