Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.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,从中我们了解到一个表达式,如: 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)