Сделать рекурсивный поток из одного элемента? - PullRequest
2 голосов
/ 03 июля 2011

Я создал поток для Серых кодов , используя рекурсию следующим образом:

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)

Мне действительно не нужен список ("0", "1") в определении, потому что он может быть создан из элемента 0:

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

Так есть ли способ / шаблон, который можно использовать для создания потока только из первого элемента?

1 Ответ

3 голосов
/ 03 июля 2011
val gray: Stream[List[String]] = List("") #:: gray.map {gnext}

Или, альтернативно,

val gray = Stream.iterate(List(""))(gnext)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...