(read-number): Catch errors.
[bpt/emacs.git] / lispref / hash.texi
index 107935f..c5b68e2 100644 (file)
@@ -1,15 +1,17 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1999, 2003 Free Software Foundation, Inc.
+@c Copyright (C) 1999, 2001, 2002, 2003, 2004, 2005,
+@c   2006, 2007  Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @setfilename ../info/hash
 @node Hash Tables, Symbols, Sequences Arrays Vectors, Top
 @chapter Hash Tables
 @cindex hash tables
+@cindex lookup tables
 
-  A hash table is a very fast kind of lookup table, somewhat like
-an alist in that it maps keys to corresponding values.  It differs
-from an alist in these ways:
+  A hash table is a very fast kind of lookup table, somewhat like an
+alist (@pxref{Association Lists}) in that it maps keys to
+corresponding values.  It differs from an alist in these ways:
 
 @itemize @bullet
 @item
@@ -27,9 +29,9 @@ There is no way to share structure between two hash tables,
 the way two alists can share a common tail.
 @end itemize
 
-  Emacs Lisp (starting with Emacs 21) provides a general-purpose hash
-table data type, along with a series of functions for operating on them.
-Hash tables have no read syntax, and print in hash notation, like this:
+  Emacs Lisp provides a general-purpose hash table data type, along
+with a series of functions for operating on them.  Hash tables have no
+read syntax, and print in hash notation, like this:
 
 @example
 (make-hash-table)
@@ -46,19 +48,19 @@ of object and are used only for recording interned symbols
 (@pxref{Creating Symbols}).
 
 @menu
-* Creating Hash::
-* Hash Access::
-* Defining Hash::
-* Other Hash::
+* Creating Hash::       Functions to create hash tables.
+* Hash Access::         Reading and writing the hash table contents.
+* Defining Hash::       Defining new comparison methods
+* Other Hash::          Miscellaneous.
 @end menu
 
 @node Creating Hash
 @section Creating Hash Tables
+@cindex creating hash tables
 
   The principal function for creating a hash table is
 @code{make-hash-table}.
 
-@tindex make-hash-table
 @defun make-hash-table &rest keyword-args
 This function creates a new hash table according to the specified
 arguments.  The arguments should consist of alternating keywords
@@ -79,13 +81,13 @@ alternatives:
 Keys which are numbers are ``the same'' if they are @code{equal}, that
 is, if they are equal in value and either both are integers or both
 are floating point numbers; otherwise, two distinct objects are never
-``the same''.
+``the same.''
 
 @item eq
 Any two distinct Lisp objects are ``different'' as keys.
 
 @item equal
-Two Lisp objects are ``the same'', as keys, if they are equal
+Two Lisp objects are ``the same,'' as keys, if they are equal
 according to @code{equal}.
 @end table
 
@@ -146,15 +148,14 @@ number.
 The default value is 1.5.
 
 @item :rehash-threshold @var{threshold}
-This specifies the criterion for when the hash table is ``full.''  The
-value, @var{threshold}, should be a positive floating point number, no
-greater than 1.  The hash table is ``full'' whenever the actual number of
-entries exceeds this fraction of the nominal size.  The default for
-@var{threshold} is 0.8.
+This specifies the criterion for when the hash table is ``full'' (so
+it should be made larger).  The value, @var{threshold}, should be a
+positive floating point number, no greater than 1.  The hash table is
+``full'' whenever the actual number of entries exceeds this fraction
+of the nominal size.  The default for @var{threshold} is 0.8.
 @end table
 @end defun
 
-@tindex makehash
 @defun makehash &optional test
 This is equivalent to @code{make-hash-table}, but with a different style
 argument list.  The argument @var{test} specifies the method
@@ -167,23 +168,22 @@ This function is obsolete. Use @code{make-hash-table} instead.
 @section Hash Table Access
 
   This section describes the functions for accessing and storing
-associations in a hash table.
+associations in a hash table.  In general, any Lisp object can be used
+as a hash key, unless the comparison method imposes limits.  Any Lisp
+object can also be used as the value.
 
-@tindex gethash
 @defun gethash key table &optional default
 This function looks up @var{key} in @var{table}, and returns its
 associated @var{value}---or @var{default}, if @var{key} has no
 association in @var{table}.
 @end defun
 
-@tindex puthash
 @defun puthash key value table
 This function enters an association for @var{key} in @var{table}, with
 value @var{value}.  If @var{key} already has an association in
 @var{table}, @var{value} replaces the old associated value.
 @end defun
 
-@tindex remhash
 @defun remhash key table
 This function removes the association for @var{key} from @var{table}, if
 there is one.  If @var{key} has no association, @code{remhash} does
@@ -194,7 +194,6 @@ non-@code{nil} if it actually removed an association and @code{nil}
 otherwise.  In Emacs Lisp, @code{remhash} always returns @code{nil}.
 @end defun
 
-@tindex clrhash
 @defun clrhash table
 This function removes all the associations from hash table @var{table},
 so that it becomes empty.  This is also called @dfn{clearing} the hash
@@ -204,18 +203,18 @@ table.
 @var{table}.  In Emacs Lisp, it returns @code{nil}.
 @end defun
 
-@tindex maphash
 @defun maphash function table
 @anchor{Definition of maphash}
 This function calls @var{function} once for each of the associations in
 @var{table}.  The function @var{function} should accept two
 arguments---a @var{key} listed in @var{table}, and its associated
-@var{value}.
+@var{value}.  @code{maphash} returns @code{nil}.
 @end defun
 
 @node Defining Hash
 @section Defining Hash Comparisons
 @cindex hash code
+@cindex define hash comparisons
 
   You can define new methods of key lookup by means of
 @code{define-hash-table-test}.  In order to use this feature, you need
@@ -232,7 +231,6 @@ other nearby slots, to see if it has found the key being sought.
 function to compute the hash code from a key, and a function to compare
 two keys directly.
 
-@tindex define-hash-table-test
 @defun define-hash-table-test name test-fn hash-fn
 This function defines a new hash table test, named @var{name}.
 
@@ -254,7 +252,6 @@ under the property @code{hash-table-test}; the property value's form is
 @code{(@var{test-fn} @var{hash-fn})}.
 @end defun
 
-@tindex sxhash
 @defun sxhash obj
 This function returns a hash code for Lisp object @var{obj}.
 This is an integer which reflects the contents of @var{obj}
@@ -275,12 +272,11 @@ compared case-insensitively.
 @example
 (defun case-fold-string= (a b)
   (compare-strings a nil nil b nil nil t))
-
 (defun case-fold-string-hash (a)
   (sxhash (upcase a)))
 
-(define-hash-table-test 'case-fold 'case-fold-string=
-                        'case-fold-string-hash))
+(define-hash-table-test 'case-fold
+  'case-fold-string= 'case-fold-string-hash)
 
 (make-hash-table :test 'case-fold)
 @end example
@@ -300,46 +296,38 @@ and equal-looking objects are considered the same key.
 
   Here are some other functions for working with hash tables.
 
-@tindex hash-table-p
 @defun hash-table-p table
 This returns non-@code{nil} if @var{table} is a hash table object.
 @end defun
 
-@tindex copy-hash-table
 @defun copy-hash-table table
 This function creates and returns a copy of @var{table}.  Only the table
 itself is copied---the keys and values are shared.
 @end defun
 
-@tindex hash-table-count
 @defun hash-table-count table
 This function returns the actual number of entries in @var{table}.
 @end defun
 
-@tindex hash-table-test
 @defun hash-table-test table
 This returns the @var{test} value that was given when @var{table} was
 created, to specify how to hash and compare keys.  See
 @code{make-hash-table} (@pxref{Creating Hash}).
 @end defun
 
-@tindex hash-table-weakness
 @defun hash-table-weakness table
 This function returns the @var{weak} value that was specified for hash
 table @var{table}.
 @end defun
 
-@tindex hash-table-rehash-size
 @defun hash-table-rehash-size table
 This returns the rehash size of @var{table}.
 @end defun
 
-@tindex hash-table-rehash-threshold
 @defun hash-table-rehash-threshold table
 This returns the rehash threshold of @var{table}.
 @end defun
 
-@tindex hash-table-size
 @defun hash-table-size table
 This returns the current nominal size of @var{table}.
 @end defun