Common Lisp: удалить пару в списке через setq и assoc

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

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

(setf (assoc 'author1 q) nil)

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


person Tyrus    schedule 02.01.2012    source источник


Ответы (2)


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

(setf q (remove 'author1 q :key #'car))
person Vsevolod Dyomkin    schedule 02.01.2012

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

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

person Rainer Joswig    schedule 02.01.2012