static S nlUnparse(Lisp tree) { ret nlUnparse(tree, true); } static S nlUnparse(Lisp tree, boolean dropOuterBrackets) { new StringBuilder buf; nlUnparse(tree, buf, dropOuterBrackets); ret str(buf); } static void nlUnparse(Lisp tree, StringBuilder buf, boolean dropOuterBrackets) { if (tree == null) ret; // special classes - Var etc. if (tree.getClass() != Lisp.class) { buf.append(tree); ret; } if (tree.isA("[]")) { if (!dropOuterBrackets) buf.append("["); } else if (tree.isA("()")) buf.append("("); else { if (tree.isLeaf()) buf.append(tree.head); else buf.append("?? " + tree); ret; } for (int i = 0; i < tree.size(); i++) { if (i != 0) buf.append(" "); nlUnparse(tree.get(i), buf, false); } if(tree.isA("[]")) { if (!dropOuterBrackets) buf.append("]"); } else buf.append(")"); }