private static void MakeUserBindableIndexical(Symbol name, object defaultValue) { if (!Term.IsGround(defaultValue)) { throw new ArgumentException("Initial value of an indexical must be a ground term."); } // We do CopyInstantiation out of paranoia that there might be some variables buried in defaultValue // that might get unbound in the future. DeclareIndexical(name, MakeLookup(name, CopyInstantiation(defaultValue))); }