我有以下函數返回一個整數列表中的元素之間的距離的列表:遞歸列表連接
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
}
}
的::
阻止我使用@tailrec
註解雖然看上去調用recurse
處於尾部位置。
是否有@tailrec
兼容的方式來進行串接?
我可以使用累加器,但然後我將不得不反轉輸入或輸出,對不對?
編輯:我特別感興趣的遞歸方法。我的具體使用情況是比較複雜的一個調用recurse
一點可以幾個項目添加到結果列表:
=> item1 :: item2:: recurse(...)
距離函數只是爲了說明問題的例子。
我發現很多次,積累和倒退比我嘗試過的其他替代方案快。它總是取決於具體情況,但不要害怕扭轉。 – huynhjl 2013-04-29 14:47:30
我認爲積累+逆轉是現在的方式。謝謝! – 2013-04-29 15:29:19
積累和反轉的通常替代方法是差異列表的概念,其中積累了通過附加而不是列表本身來建立列表的函數。這可能不適用於JVM,雖然... – 2013-04-29 16:36:19