static Lisp snlRemoveReferences(Lisp tree) { if (tree == null || tree.size() == 0) ret tree; Lisp sub = tree.get(tree.size()-1); if (snlIsRef(sub)) if (tree.size() == 1) // it [= x] ret lisp(dropSuffix(" *", tree.head)); else if (tree.size() == 2) // [bla] [= x] ret tree.get(0); else ret tree; // not handled // recurse Lisp lisp = new Lisp(tree.head); for (Lisp child : tree) lisp.add(snlRemoveReferences(child)); ret lisp; }