@code{(require 'alist)}
@ftindex alist

Alist functions provide utilities for treating a list of key-value pairs
as an associative database.  These functions take an equality predicate,
@var{pred}, as an argument.  This predicate should be repeatable,
symmetric, and transitive.

Alist functions can be used with a secondary index method such as hash
tables for improved performance.


@defun predicate->asso pred

Returns an @dfn{association function} (like @code{assq}, @code{assv}, or
@cindex association function
@code{assoc}) corresponding to @var{pred}.  The returned function
returns a key-value pair whose key is @code{pred}-equal to its first
argument or @code{#f} if no key in the alist is @var{pred}-equal to the
first argument.
@end defun


@defun alist-inquirer pred

Returns a procedure of 2 arguments, @var{alist} and @var{key}, which
returns the value associated with @var{key} in @var{alist} or @code{#f} if
@var{key} does not appear in @var{alist}.
@end defun


@defun alist-associator pred

Returns a procedure of 3 arguments, @var{alist}, @var{key}, and
@var{value}, which returns an alist with @var{key} and @var{value}
associated.  Any previous value associated with @var{key} will be
lost.  This returned procedure may or may not have side effects on its
@var{alist} argument.  An example of correct usage is:

@lisp
(define put (alist-associator string-ci=?))
(define alist '())
(set! alist (put alist "Foo" 9))
@end lisp
@end defun


@defun alist-remover pred

Returns a procedure of 2 arguments, @var{alist} and @var{key}, which
returns an alist with an association whose @var{key} is key removed.
This returned procedure may or may not have side effects on its
@var{alist} argument.  An example of correct usage is:

@lisp
(define rem (alist-remover string-ci=?))
(set! alist (rem alist "foo"))
@end lisp
@end defun


@defun alist-map proc alist

Returns a new association list formed by mapping @var{proc} over the
keys and values of @var{alist}.   @var{proc} must be a function of 2
arguments which returns the new value part.
@end defun


@defun alist-for-each proc alist

Applies @var{proc} to each pair of keys and values of @var{alist}.
@var{proc} must be a function of 2 arguments.  The returned value is
unspecified.
@end defun

