动态的理解

时间:2017-12-08 11:27:23

标签: scala

我对Scala比较陌生,所以我对这门语言并不十分自信,我需要你的帮助来解决问题。我知道for-comprehension只是简化复杂map / flatMap层次结构的语法糖。

现在,考虑具有3个不同的范围间隔,这些间隔应该组合以创建值的所有可能组合(尊重间隔)。

示例

使用for-comprehension可以解决问题:

val intervalX = 1 to 5
val intervalY = 6 to 13
val intervalZ = 20 to 50
for {
  x <- intervalX;
  y <- intervalY;
  z <- intervalZ
} yield (x,y,z)

Scala编译器将其转换为:

intervalX.flatMap{x =>
    intervalY.flatMap{y =>
        intervalZ.map{z => (x,y,z)}
    }
}

但是,如果输入变量数量d的间隔,则问题会更难。是否可以执行相同的操作,获得所有可能的d元组?我认为可以使用foldLeft操作解决,但我目前无法正确编写。你能救我吗?

由于

1 个答案:

答案 0 :(得分:2)

如果您可以在没有元组的情况下生活,那么使用foldLeft并返回表示组合的列表的版本可以是:

{{1}}