code: func (ss *saveSet) ContainsRecursive(t *ast.Term, b *bindings) bool {
  	found := false
  	ast.WalkTerms(t, func(x *ast.Term) bool {
  		if _, ok := x.Value.(ast.Var); ok {
  			x1, b1 := b.apply(x)
  			if x1 != x || b1 != b {
  				if ss.ContainsRecursive(x1, b1) {
  					found = true
  				}
  			} else if ss.Contains(x1, b1) {
  				found = true
  			}
  		}
  		return found
  	})
  	return found
  }
docs: // ContainsRecursive retruns true if the term t is or contains a term that is
  // contained in the save set. This function will close over the binding list
  // when it encounters vars.