Github user dkuppitz commented on a diff in the pull request: https://github.com/apache/tinkerpop/pull/876#discussion_r202102880 --- Diff: docs/src/reference/the-traversal.asciidoc --- @@ -2125,6 +2125,17 @@ traverser repeats. However, because the emit-predicate is declared true, those v Given that `loops==2`, the until-predicate fails and ripple and lop are emitted. Therefore, the traverser has seen the vertices: lop, vadas, josh, ripple, and lop. +`repeat()`-steps may be nested inside each other or inside the `emit()` or `until()` predicates and they can also be 'named' by passing a string as the first parameter to `repeat()`. The loop counter of a named repeat step can be accessed within the looped context with `loops(loopName)` where `loopName` is the name set whe creating the `repeat()`-step. + +[gremlin-groovy,modern] +---- +g.V(1).repeat(out("knows")).until(__.repeat(out("created")).emit(__.has("name", "lop"))) <1> +g.V(6).repeat('a', both('created')).emit(repeat('b', __.both('knows')).until(or(loops().is(2), loops('b').is(loops('a')))).hasId(2)).dedup() <2> --- End diff -- I haven't tried it yet, but I don't think this query does what the description says. It only works because it has the early break condition `loops().is(2)`. `.is(loops('a'))`, on the other hand, should always return `false`, since it's comparing the incoming `Long` value against a `Traversal`. To match the description, the query should look more like this (IMO): ``` g.V(6). repeat('a', both('created').simplePath()). emit(repeat('b', __.both('knows')). until(loops('b').as('b').where(loops('a').as('b')))). hasId(2)).dedup() ```
---