Lee*_*eeG 6 scala yield list-comprehension scala-2.9
我正在尝试根据公式生成scala中的列表:
for n > 1 f(n) = 4*n^2 - 6*n + 6 and for n == 1 f(n) = 1
Run Code Online (Sandbox Code Playgroud)
目前我有:
def lGen(end: Int): List[Int] = {
for { n <- List.range(3 , end + 1 , 2) } yields { 4*n*n - 6*n - 6 }
}
Run Code Online (Sandbox Code Playgroud)
对于end = 5,这将给出列表:
List(24 , 76)
Run Code Online (Sandbox Code Playgroud)
现在我一直试图找到一种优雅的方式让这个功能给
List(1 , 24 , 74)
Run Code Online (Sandbox Code Playgroud)
任何建议将不胜感激.
- 李
Lui*_*hys 12
我将列表生成中的"公式"分开:
val f : Int => Int = {
case 1 => 1
case x if x > 1 => 4*x*x - 6*x + 6
}
def lGen(end: Int) = (1 to end by 2 map f).toList
Run Code Online (Sandbox Code Playgroud)
要么
def lGen(end: Int) = List.range(1, end + 1, 2) map f
Run Code Online (Sandbox Code Playgroud)
这个怎么样:
scala> def lGen(end: Int): List[Int] =
1 :: List.range(3, end+1, 2).map(n => 4*n*n - 6*n + 6)
scala> lGen(5)
res0: List[Int] = List(1, 24, 76)
Run Code Online (Sandbox Code Playgroud)