我对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操作解决,但我目前无法正确编写。你能救我吗?
由于
答案 0 :(得分:2)
如果您可以在没有元组的情况下生活,那么使用foldLeft并返回表示组合的列表的版本可以是:
{{1}}