整数のリストの要素間の距離のリストを返す次の関数があります。
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
私の具体的な使用例は、1 回の呼び出しで結果リストに複数の項目を追加できるという点で、もう少し複雑です。
=> item1 :: item2:: recurse(...)
距離関数は、問題を示すための単なる例です。