vsc = new Chain<Varset>(Varset(b.term(), cd_set, NULL), vsc);
vsc = new Chain<Varset>(Varset(b.term(), cd_set, NULL, tt), vsc);
  static const Varset* make(const Chain<Varset>*& vsc, const Binding& b,			    bool reverse = false) {    if (b.equality()) {      const Chain<StepVariable>* cd_set =	new Chain<StepVariable>(std::make_pair(b.var(), b.var_id()), NULL);      if (is_variable(b.term())) {	cd_set = new Chain<StepVariable>(std::make_pair(b.term(), b.term_id()),					 cd_set);	vsc = new Chain<Varset>(Varset(NULL_TERM, cd_set, NULL), vsc);      } else {	vsc = new Chain<Varset>(Varset(b.term(), cd_set, NULL), vsc);      }      return &vsc->head;    } else {      Object constant;      const Chain<StepVariable>* cd_set;      const Chain<StepVariable>* ncd_set;      if (reverse) {	if (is_variable(b.term())) {	  constant = NULL_TERM;	  cd_set = new Chain<StepVariable>(std::make_pair(b.term(),							  b.term_id()),					   NULL);	} else {	  constant = b.term();	  cd_set = NULL;	}	ncd_set = new Chain<StepVariable>(std::make_pair(b.var(), b.var_id()),					  NULL);      } else { /* !reverse */	if (is_variable(b.term())) {	  constant = NULL_TERM;	  cd_set = new Chain<StepVariable>(std::make_pair(b.var(), b.var_id()),					   NULL);	  ncd_set = new Chain<StepVariable>(std::make_pair(b.term(),							   b.term_id()),					    NULL);	} else {	  return NULL;	}      }      vsc = new Chain<Varset>(Varset(constant, cd_set, ncd_set), vsc);      return &vsc->head;    }  }