在Scala中,产量如何扩展到多维循环?
从中我们了解到一个表达式,如:在Scala中,产量如何扩展到多维循环?,scala,Scala,从中我们了解到一个表达式,如: for( i <- 1 to 10 ) yield i + 1 但是下面的表达式扩展为什么 for( i <- 1 to 50 j <- i to 50 ) yield List(1,i,j) 我对这个问题感兴趣,因为我想做一个函数,它可以执行多个Xi,这在相关的例子中得到了很好的解释。特别是: for(x <- c1; y <- c2; z <- c3) yield {...} 我不认为有一种方法可以抽象出任意的嵌套理
for( i <- 1 to 10 ) yield i + 1
但是下面的表达式扩展为什么
for( i <- 1 to 50 j <- i to 50 ) yield List(1,i,j)
我对这个问题感兴趣,因为我想做一个函数,它可以执行多个
Xi,这在相关的例子中得到了很好的解释。特别是:
for(x <- c1; y <- c2; z <- c3) yield {...}
我不认为有一种方法可以抽象出任意的嵌套理解(除非你使用巫毒魔法,比如宏)这在一个相关的例子中得到了很好的解释。特别是:
for(x <- c1; y <- c2; z <- c3) yield {...}
我不认为有一种方法可以抽象出任意的嵌套理解(除非你像宏一样使用伏都教魔法)有关for循环扩展到什么的解释,请参见om nom nom的答案。我想回答第一个问题的第二部分,如何实现一个功能:
for( X1 <- 1 to 50 X2 <- X1 to 50 X3 <- X2 to 50 ..... Xn <- Xn to 50 )
yield List(1,X1,X2,X3,.....,Xn)
我们递归地计算每个循环,由内而外,从Xn开始到50
,然后构建解决方案
针对以下更一般情况的解决方案:
for( X1 <- S1 X2 <- S2 X3 <- S3 ..... Xn <- Sn )
yield List(1,X1,X2,X3,.....,Xn)
for(X1有关for循环扩展到什么的解释,请参见om nom nom的答案。我想回答开头问题的第二部分,如何实现一个可以执行以下操作的函数:
for( X1 <- 1 to 50 X2 <- X1 to 50 X3 <- X2 to 50 ..... Xn <- Xn to 50 )
yield List(1,X1,X2,X3,.....,Xn)
我们递归地计算每个循环,由内而外,从Xn开始到50
,然后构建解决方案
针对以下更一般情况的解决方案:
for( X1 <- S1 X2 <- S2 X3 <- S3 ..... Xn <- Sn )
yield List(1,X1,X2,X3,.....,Xn)
for(X1)我知道Vector
是Indexseq
的一个子类型,但是你为什么不在这里使用Indexseq
?感谢你的回答,但是高达50
的输出不是按要求递增的。是否可以修改它,使其产生“严格递增序列”?再次感谢你的回答(:Oops,我没有注意到每个循环都是从上一个循环的值开始的。你是对的,IndexedSeq
更有意义。编辑。我知道Vector
是Indexseq
的一个子类型,但是你为什么不在这里使用Indexseq
呢?谢谢你的回答,但是50
的输出不是递增的tal根据需要。是否可以修改它以使其产生“严格增量序列”?再次感谢您的回答(:Oops,我错过了每个循环从上一个循环的值开始。您是对的,IndexedSeq
更有意义。已编辑。
def upto50(dimension: Int) = {
def loop(n: Int, start: Int): IndexedSeq[List[Int]] = {
if (n > dimension)
IndexedSeq(List())
else {
(n to 50).flatMap(x => loop(n + 1, x).map(x :: _))
}
}
loop(1, 1)
}
for( X1 <- S1 X2 <- S2 X3 <- S3 ..... Xn <- Sn )
yield List(1,X1,X2,X3,.....,Xn)