常见的lisp:通过setq和assoc删除alist中的一对

时间:2012-01-02 17:15:24

标签: common-lisp setf

我在旧的常见的lisp书中找到了代码,并在lispworks和clozure cl中尝试了。但是他们都无法运行代码。此代码用于删除对:(author1 . john)

(setf q '((author1 . john) (author2 . tony) (author3 . fred)))

(setf (assoc 'author1 q) nil)

感谢您的时间

2 个答案:

答案 0 :(得分:4)

您无法就地操作列表,但是您可以以功能方式获取没有指定键的新列表并重新分配变量:

(setf q (remove 'author1 q :key #'car))

答案 1 :(得分:2)

函数(SETF ASSOC)未在ANSI Common Lisp中定义,并且无法进行可移植定义(ANSI CL规范不允许为CL包中的符号写入SETF函数)。

您需要以其他方式删除相应的对。