Common lisp: удалить пару из alist с помощью setq и assoc

Я нахожу код в старой общедоступной книге и пробую его в lispworks и clozure cl. Но оба они не могут запустить код. Этот код используется для удаления пары: (author1 . john),

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

(setf (assoc 'author1 q) nil)

Спасибо за ваше время

2 ответа

Решение

Вы не можете манипулировать списком на месте, но вы можете функционально получить новый список без указанного ключа и переназначить переменную:

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

Функция (SETF ASSOC) не определяется в ANSI Common Lisp и не может быть определено переносимым образом (согласно спецификации ANSI CL не разрешено писать функцию SETF для символа в пакете CL).

Вам нужно удалить соответствующую пару другим способом.

Другие вопросы по тегам