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).
Вам нужно удалить соответствующую пару другим способом.