小编And*_*ger的帖子

递归列表连接

我有以下函数返回整数列表的元素之间的距离列表:

def dists(l: List[Int]) = {
  //@annotation.tailrec
  def recurse(from: Int, rest: List[Int]): List[Int] = rest match {
    case Nil => Nil
    case to :: tail => to - from :: recurse(to, tail)
  }

  l match {
    case first :: second :: _ => recurse(first, l.tail)
    case _ => Nil
  }
}
Run Code Online (Sandbox Code Playgroud)

::阻止我使用@tailrec虽然看上去调用注解recurse是在尾部位置.

是否有@tailrec兼容的方法进行连接?

我可以使用累加器但是我必须反转输入或输出,对吗?

编辑:我对递归方法特别感兴趣.我的具体用例有点复杂,因为一次调用recurse可以在结果列表中添加几个项目:

=> item1 :: item2:: recurse(...)
Run Code Online (Sandbox Code Playgroud)

距离函数只是一个证明问题的例子.

functional-programming scala

2
推荐指数
1
解决办法
3877
查看次数

标签 统计

functional-programming ×1

scala ×1