Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala中给定长度的所有二进制序列的延迟生成_Scala - Fatal编程技术网

Scala中给定长度的所有二进制序列的延迟生成

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

我想生成给定长度的所有二进制序列,但我希望它是惰性的,这样就不会使内存过载

作为我想要的示例,我提供了一个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 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我已经添加了示例输出。谢谢!我想出了一个可能有效的代码(我在下面贴了),但是你的代码更简洁,感觉更符合语言。谢谢!我提出了一个可能有效的代码(我把它贴在下面),但是你的代码更简洁,感觉它更符合语言。