Scala中给定长度的所有二进制序列的延迟生成
我想生成给定长度的所有二进制序列,但我希望它是惰性的,这样就不会使内存过载 作为我想要的示例,我提供了一个Python代码,它正是我想要的:Scala中给定长度的所有二进制序列的延迟生成,scala,Scala,我想生成给定长度的所有二进制序列,但我希望它是惰性的,这样就不会使内存过载 作为我想要的示例,我提供了一个Python代码,它正是我想要的: def nextBinary(i, seq): b = seq[:i] + [1] + seq[i + 1:] yield b if i + 1 < len(seq): for nextSeq in nextBinary(i + 1, seq): yield nextSeq for
def nextBinary(i, seq):
b = seq[:i] + [1] + seq[i + 1:]
yield b
if i + 1 < len(seq):
for nextSeq in nextBinary(i + 1, seq):
yield nextSeq
for nextSeq in nextBinary(i + 1, b):
yield nextSeq
def genBinary(length):
start = [0 for i in range(length)]
yield start
for seq in nextBinary(0, start):
yield seq
如何在Scala中编写等价的代码?我怀疑它可能在某种程度上适用于流,也可能适用于连续性。这里有一种方法可以用于流:
val bss: Stream[Vector[List[Boolean]]] =
Vector(List.empty) #:: bss.map(bs => bs.map(true :: _) ++ bs.map(false :: _))
bss(3).mkString("\n")
//res1: String =
//List(true, true, true)
//List(true, true, false)
//List(true, false, true)
//List(true, false, false)
//List(false, true, true)
//List(false, true, false)
//List(false, false, true)
//List(false, false, false)
bss(4).mkString("\n")
//res2: String =
//List(true, true, true, true)
//List(true, true, true, false)
//List(true, true, false, true)
//List(true, true, false, false)
//List(true, false, true, true)
//List(true, false, true, false)
//List(true, false, false, true)
//List(true, false, false, false)
//List(false, true, true, true)
//List(false, true, true, false)
//List(false, true, false, true)
//List(false, true, false, false)
//List(false, false, true, true)
//List(false, false, true, false)
//List(false, false, false, true)
//List(false, false, false, false)
这里有一种使用流的方法:
val bss: Stream[Vector[List[Boolean]]] =
Vector(List.empty) #:: bss.map(bs => bs.map(true :: _) ++ bs.map(false :: _))
bss(3).mkString("\n")
//res1: String =
//List(true, true, true)
//List(true, true, false)
//List(true, false, true)
//List(true, false, false)
//List(false, true, true)
//List(false, true, false)
//List(false, false, true)
//List(false, false, false)
bss(4).mkString("\n")
//res2: String =
//List(true, true, true, true)
//List(true, true, true, false)
//List(true, true, false, true)
//List(true, true, false, false)
//List(true, false, true, true)
//List(true, false, true, false)
//List(true, false, false, true)
//List(true, false, false, false)
//List(false, true, true, true)
//List(false, true, true, false)
//List(false, true, false, true)
//List(false, true, false, false)
//List(false, false, true, true)
//List(false, false, true, false)
//List(false, false, false, true)
//List(false, false, false, false)
genBinary(3)
的输出是什么?genBinary(2)
的输出是什么?@0\uuuu我已经添加了示例输出。genBinary(3)
的输出是什么?genBinary(2)
的输出是什么?@0\uuu我已经添加了示例输出。谢谢!我想出了一个可能有效的代码(我在下面贴了),但是你的代码更简洁,感觉更符合语言。谢谢!我提出了一个可能有效的代码(我把它贴在下面),但是你的代码更简洁,感觉它更符合语言。