2015-12-29 3 views
3

Класс Scalaz Tree доказывает кажущуюся очень полезную функциональность `Zipper 'через TreeLoc (Javadoc).Как перебирать дерево в Scalaz

Однако мне не ясно, как легко проходить через дерево (например, найти «k-й» узел в дереве, содержащем всего n> k узлов), не делая много условного хеджирования о том, молния находится в конце списка текущих детей.

Есть ли простой способ сделать это, что мне не хватает?

ответ

3

Кража из метода TreeLoc.find, вы могли бы сделать что-то вроде этого:

def findAt[A](tree: TreeLoc[A], k: Int): Option[TreeLoc[A]] = { 
    Cobind[TreeLoc].cojoin(tree).tree.flatten.drop(k).headOption 
    }