涉及flatMap时Scala中的尾递归

时间:2016-06-12 00:55:59

标签: scala tail-recursion flatmap

我必须使用一个需要迭代迭代另一个列表中的列表的结构 (类似于从事务列表中创建频繁项目时使用的结构)。 下面是伪代码。

我收到错误,说下面的iterRecur不是尾递归。尾递归错误指向seqElem <- this.mySeq下面的flatMap行 你能建议我如何修复代码吗?

trait SeqElem[T] {
  name: String
  children: List[Node[T]]

class Structure[T](mySeq: List[SeqElem[T]])  {

  def getStructure(node: Node[T]): this.type = {
    ...
  }

  def iterRecur(leastCount: Long, listA: List[T]): Unit = {
    val sumSeq = 
    for(
      //@tailrec annotation points this as causing problem
      seqElem <- this.mySeq;
      node <- seqElem.children;
      if seqElem.count > leastCount
    ){
      val newStructure = getSubstucture(node)
      if (newStructure.mySeq.length > 0){
        newStructure.iterRecur(leastCount, listA ++ List(seqElem.name))
      }else{
        println(listA)
      }
    }
  }
}

0 个答案:

没有答案