anchor.diff:  ==>v[1]
   ==>v[1]
   ==>v[1]
  +
  +[[retain-step]]
  +Retain Step
  +~~~~~~~~~~~
  +
  +The `retain()`-step (*filter*) can be used to filter objects from the traversal stream that don't match the provided criteria. If `retain()` is provided a string, the retaining object is retrieved via `traverser.sideEffects().get(label)`. If `retain()` is provided a collection, then any object not contained in that collection is filtered out. Please see the related <<except-step,`except()`-step>>.
  +
  +[source,groovy]
  +gremlin> g.v(1).as('x').out('created').in('created')
  +==>v[1]
  +==>v[4]
  +==>v[6]
  +gremlin> g.v(1).as('x').out('created').in('created').retain('x')
  +==>v[1]
  +gremlin> g.v(1).as('x').out('created').in('created').value('name')
  +==>marko
  +==>josh
  +==>peter
  +gremlin> g.v(1).as('x').out('created').in('created').value('name').retain(['marko','stephen'])
  +==>marko
   
   [[select-step]]
   Select Step
  
positive.code: ==>[v[1], v[3], v[1]]
  ==>[v[1], v[2], v[1]]
  ==>[v[1], v[4], v[1]]
  
  [[fold-step]]
  Fold Step
  
negative.code: gremlin> g.of().inject(1,2).map{it.get() + 1}.map{g.v(it.get())}.value('name')
  ==>vadas
  ==>lop
  
  [[interval-step]]
  Interval Step
  ~~~~~~~~~~~~~
  
  The `interval()`-step (*filter*) is similar to <<has-step,`has()`-step>> in that it filters elements according to their properties.
  
  [source,groovy]
  gremlin> g.V().interval('age',20,30)
  ==>v[1]
  ==>v[2]
  gremlin> g.V().interval('age',20,30).value('age')
  ==>29
  ==>27
  gremlin> g.V().has('age',gt,20).has('age',lte,30).value('age') // the equivalent expression using only has()
  ==>29
  ==>27
  
  [[jump-step]]
  Jump Step
  