a3 = args[0];
a4 = args[1];
} else if (a1.isVariable()){
a3 = new VariableTerm(engine);
a4 = new VariableTerm(engine);
((VariableTerm) a1).bind(new ListTerm(a3, a4), engine.trail);
} else {
return engine.fail();
}
a2 = a2.dereference();
if (a2.isList()){
Term[] args = {((ListTerm)a2).car(), ((ListTerm)a2).cdr()};
if (! a3.unify(args[0], engine.trail))
return engine.fail();
a5 = args[1];
} else if (a2.isVariable()){
a5 = new VariableTerm(engine);
((VariableTerm) a2).bind(new ListTerm(a3, a5), engine.trail);
} else {
return engine.fail();
}
engine.aregs[1] = a4;
engine.aregs[2] = a5;