Adds some basic setf-expansions for alists.
Common Lisp
Switch branches/tags
Pull request Compare This branch is 1 commit behind adlai:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


CL-ALREF Utility by Adlai

  Many thanks to stassats on #lisp, Pascal J. Bourguignon, and also a
  bit of inspiration from Arc's ALREF.  Updated on Fri, Jul 10th, 2009.


  Just (:use-package :alref).

  Please use the latest version, available through git. The public
    clone link is <git://>.

  #'ALREF returns the CDR of what you would get if you called #'ASSOC
    on the same arguments.  If a :default argument is supplied, this
    will be returned instead of NIL if no matching key is found.

  (setf (alref item alist) foo) will:

   - Add a key-value pair to the alist, if there is none for ITEM yet.

   - Change the value under the key ITEM, if it already exists.

   - Delete the key-value pair of ITEM, if FOO is NIL.

  It is possible to change the default values for :test, :key,
    :default with three variables exported from the :ALREF package.
    The variables, and their initial default values, are:

    - ALREF:*default-alref-test*      defaults to #'eql
    - ALREF:*default-alref-key*       defaults to #'identity
    - ALREF:*default-alref-default*   defaults to NIL


  This is version 2.5.

  Version 1.0 used (defun (setf alref) ...), which led to a bug when
    ALIST was NIL.

  Version 2.0 uses a setf expansion to modify the setf macro itself,
    thus generating code which can access and modify local variables
    (ie, ALIST when it is bound by a LAMBDA).  It also used the
    with-gensyms macro in a way which was not portable, specifically
    with regards to the CLISP implementation.

  Version 2.1 sat in its own package, and exported 'ALREF.

  Version 2.2 allowed the user to customize the default key and test
    arguments.  It also added some error-checking code to warn of
    potentially buggy behavior.

  Version 2.3 improved the customization options.  It also renamed the
    default variables, and introduced a bug.

  Version 2.3.1 fixed that bug.

  Version 2.3.2 had half of a bugfix for a more serious problem that
    came from blurring the line between macro-expansion time and
    evaluation time.

  Version 2.4 completed that bugfix.

  Version 2.5 fixes a bug which would occur when the place 'alist
    had to be setf-expanded itself. ALREF now plays nicely here too.

Feel free to copy this code and use it in your projects, but please
  give credit where it's due. Also, please leave this README in place.

If you have improvements to the code or find any bugs, please let me
  know; I'm "Adlai" on