2012-01-02 3 views
2

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

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

(setf (assoc 'author1 q) nil) 

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

ответ

4

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

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

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

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