static void add_namespace_directives(List<string> ns, Dictionary<string, string> aliases, ListBox collection)
        {
            foreach (string n in ns) {
                ((IBox)collection).put(new Cons(Symbol.get_symbol(".namespace"), new Cons(n)));
            }

            ProperListBox alias_list = new ProperListBox();

            foreach (KeyValuePair<string, string> a in aliases) {
                ((IBox)alias_list).put(
                    new Cons(
                        Symbol.get_symbol(".alias"),
                        new Cons(
                            a.Key,
                            new Cons(
                                new Cons(
                                    Abbrev.quote,
                                    new Cons(Symbol.get_symbol(a.Value)))))));
            }

            ((IBox)collection).put(new Cons(Symbol.get_symbol("aliases:"), alias_list.cons));
        }
        public bool view_part(Site site, out ISiteseer new_siteseer)
        {
            m_count++;

            if (site.type != null) {
                object[] attrib = site.type.GetCustomAttributes(typeof(LiteralFieldAttribute), true);

                if (attrib.Length > 0) {
                    FieldInfo fi = site.type.GetField(((LiteralFieldAttribute)attrib[0]).field);

                    if (fi != null) {
                        m_collection.put(fi.GetValue(site.value));
                        new_siteseer = null;
                        return true;
                    }
                }
            }

            if (Literal.is_atom_type(site.value)) {

                new_siteseer = null;

                if (site.value is Symbol) {
                    m_collection.put(new Cons(Abbrev.quote, new Cons(site.value)));
                } else /*if (site.value != null)*/ {
                    object[] sitelist = m_parent_type.GetCustomAttributes(typeof(SiteListAttribute), false);

                    if (sitelist.Length > 0 || site.value != null) m_collection.put(site.value);
                }

                return true;
            } else {
                if (site.type != null) {
                    object[] attrib = site.type.GetCustomAttributes(typeof(RepresentativeFieldAttribute), true);

                    FieldInfo fi;

                    if (attrib.Length > 0) {
                        fi = site.type.GetField(((RepresentativeFieldAttribute)attrib[0]).field);

                        if (fi != null) {
                            object name = fi.GetValue(site.value);

                            if (name != null) {
                                object sym;
                                bool was_defined = m_symtab.TryGetValue(name, out sym);

                                if (was_defined) {
                                    if (sym == site.value) {
                                        m_collection.put(name);
                                        new_siteseer = null;
                                        return true;
                                    } else {
                                        throw new Exception();
                                    }
                                } else {
                                    m_symtab.Add(name, site.value);
                                }
                            }
                        }
                    }

                    if (site.value is object[]) {
                        ListBox list = new ListBox();
                        new_siteseer = new ConstructSiteseer(m_collection, list, m_ns, m_symtab, m_aliases);
                        return true;
                    } else if (site.value is Cons) {
                        m_collection.put(site.value);
                        new_siteseer = null;
                        return true;
                    } else {
                        object[] sitelist = m_parent_type.GetCustomAttributes(typeof(SiteListAttribute), false);

                        string name = resolve(site.type.Namespace, site.type.FullName, site.type.Name);

                        if (site.name != null && sitelist.Length == 0)
                            name = String.Format("{0}#{1}", name, site.name);

                        ProperListBox list = new ProperListBox();
                        ((IBox)list).put(Symbol.get_symbol(name));
                        new_siteseer = new ConstructSiteseer(m_collection, list, m_ns, m_symtab, m_aliases);
                        return true;
                    }
                } else {
                    new_siteseer = null;
                    return true;
                }
            }
        }
        static object fn_list(object[] args)
        {
            ProperListBox list = new ProperListBox();

            foreach (object o in args) {
                ((IBox)list).put(o);
            }

            return list.cons;
        }