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

发布于 2024-11-18 11:38:59 字数 618 浏览 1 评论 0原文

我已经使用递归为 格雷码 创建了一个流,如下所示:

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?

I've made a Stream for Gray Codes using recursion as follows:

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

where

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

so that, for example

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

I don't really need the List("0", "1") in the definition, because it can be produced from element 0:

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

So is there a way / pattern that can be used to produce a Stream from just the first element?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

维持三分热 2024-11-25 11:38:59
val gray: Stream[List[String]] = List("") #:: gray.map {gnext}

或者,或者,

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

Or, alternatively,

val gray = Stream.iterate(List(""))(gnext)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文