小编Ric*_*zaк的帖子

在Scala中展平元组列表?

我原以为可以很容易地将元组列表弄平:

scala> val p = "abcde".toList
p: List[Char] = List(a, b, c, d, e)

scala> val q = "pqrst".toList
q: List[Char] = List(p, q, r, s, t)

scala> val pq = p zip q
pq: List[(Char, Char)] = List((a,p), (b,q), (c,r), (d,s), (e,t))

scala> pq.flatten
Run Code Online (Sandbox Code Playgroud)

但相反,这发生了:

<console>:15: error: No implicit view available from (Char, Char) => scala.collection.GenTraversableOnce[B].
       pq.flatten
          ^
Run Code Online (Sandbox Code Playgroud)

我可以完成工作:

scala> (for (x <- pq) yield List(x._1, x._2)).flatten
res1: List[Char] = List(a, p, b, q, c, r, d, s, e, …
Run Code Online (Sandbox Code Playgroud)

scala tuples list flatten

4
推荐指数
2
解决办法
2743
查看次数

什么是在Scala中重用函数结果的好方法

让我通过例子澄清我的问题.这是在Scala中使用尾递归编写的标准取幂算法:

def power(x: Double, y: Int): Double = {
  def sqr(z: Double): Double = z * z
  def loop(xx: Double, yy: Int): Double = 
    if (yy == 0) xx
    else if (yy % 2 == 0) sqr(loop(xx, yy / 2))
    else loop(xx * x, yy - 1)

  loop(1.0, y)
}
Run Code Online (Sandbox Code Playgroud)

这里的sqr方法用于产生结果的平方loop.看起来不是一个好主意 - 为这样一个简单的操作定义一个特殊的功能.但是,我们不能只改写loop(..) * loop(..),因为它使计算加倍.

我们也可以使用val和不使用sqr函数编写它:

def power(x: Double, y: Int): Double = {
  def loop(xx: Double, yy: Int): Double …
Run Code Online (Sandbox Code Playgroud)

functional-programming scala

3
推荐指数
2
解决办法
366
查看次数

标签 统计

scala ×2

flatten ×1

functional-programming ×1

list ×1

tuples ×1