Common lisp: удалить пару из alist с помощью setq и assoc - PullRequest
2 голосов
/ 02 января 2012

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

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

(setf (assoc 'author1 q) nil)

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

Ответы [ 2 ]

4 голосов
/ 03 января 2012

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

(setf q (remove 'author1 q :key #'car))
2 голосов
/ 02 января 2012

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

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

...