public override bool match(Erlang.Object pattern, VarBind binding) { if (pattern is Erlang.Var) pattern.match(this, binding); else if (!(pattern is Erlang.List)) return false; Erlang.List tup = pattern as Erlang.List; if (arity() != tup.arity()) return false; for (int i = 0; i < arity(); ++i) if (!elems[i].match(tup[i], binding)) return false; return true; }