Lisp Knowledgebase

Title: What does (SETF ASSOC) do?

ID: 16005

Product: All
Version: All
OS: All

In LispWorks 3.2, there was a setter defined for ASSOC. Unfortunately, it was a bogus one because the value being set was the CDR of the alist entry, whereas ASSOC returns the entry itself. This violates the intent of setf "places" and causes great confusion when used in macros like INCF, PUSH etc.

To remove this confusion, the ASSOC setter was removed in LispWorks 4 and replaced by a new
place function, SYSTEM:CDR-ASSOC. Thus the following LispWorks 3.2 code:

(defvar *it-alist* nil)
(defun read-it (key)
 (cdr (assoc key *it-alist*)))
(defun write-it (key value)
 (setf (assoc key *it-alist*) value))

can be replaced by this in LispWorks 4:

(defvar *it-alist* nil)
(defun read-it (key)
 (system:cdr-assoc key *it-alist*))
(defun write-it (key value)
 (setf (system:cdr-assoc key *it-alist*) value))

The SYSTEM:CDR-ASSOC function is also available in LCL 5.

See Also:

Summary:What does (SETF ASSOC) do?
Patch Enhancement#:
Reported:6693, 4212

Company     Contact     Privacy Policy     Terms of Use