我使用递归为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?
答案 0 :(得分:3)
val gray: Stream[List[String]] = List("") #:: gray.map {gnext}
或者,或者,
val gray = Stream.iterate(List(""))(gnext)