Scala 列表推导式

发布于 2024-12-28 22:40:04 字数 444 浏览 1 评论 0原文

我正在尝试根据公式在 scala 中生成一个列表:

for n > 1 f(n) = 4*n^2 - 6*n + 6 and for n == 1 f(n) = 1

目前我有:

def lGen(end: Int): List[Int] = {
    for { n <- List.range(3 , end + 1 , 2) } yields { 4*n*n - 6*n - 6 }
}

对于 end = 5 这将给出列表:

List(24 , 76)

现在我一直在尝试找到一种优雅的方法来使这个函数给出

List(1 , 24 , 74)

任何建议不胜感激。

-李

I'm trying to generate a list in scala according to the formula:

for n > 1 f(n) = 4*n^2 - 6*n + 6 and for n == 1 f(n) = 1

currently I have:

def lGen(end: Int): List[Int] = {
    for { n <- List.range(3 , end + 1 , 2) } yields { 4*n*n - 6*n - 6 }
}

For end = 5 this would give the list:

List(24 , 76)

Right now I'm stuck on trying to find a gracefull way to make this function give

List(1 , 24 , 74)

Any suggestions would be greatly appreciated.

-Lee

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

看透却不说透 2025-01-04 22:40:04

我将从列表生成中分离出“公式”:

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

def lGen(end: Int) = List.range(1, end + 1, 2) map f

I'd separate out the "formula" from the list generation:

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

or

def lGen(end: Int) = List.range(1, end + 1, 2) map f
醉酒的小男人 2025-01-04 22:40:04

这个怎么样:

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)

How about this:

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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文