При попытке прочитать значение слота (slot-value), слот POS
отсутствует в объекте *NODE-1*
*node-1*
не является экземпляром CLOS.Это символslot-value
нужен экземпляр CLOS.Таким образом, попытка вычислить значение слота символа не имеет смысла.
Примечание: objects
в Common Lisp
В сообщении об ошибке термин объект *NODE-1*
означает конкретный символьный объект во время выполнения.Символы тоже объекты.Они не являются объектами CLOS, то есть они не являются экземплярами CLOS класса CLOS.Но обычно в Common Lisp даже символ или строка считаются объектами .
Почему это символ?
Вы задаетеслот vertices
будет иметь значение '(*node-1* *node-2*)
.Это буквальный список из двух символов, так как вы процитировали список.
CL-USER 152 > '(*node-1* *node-2*)
(*NODE-1* *NODE-2*)
CL-USER 153 > (mapcar #'type-of *)
(SYMBOL SYMBOL)
Один использует объекты напрямую
Если вы хотите вычислить список фактических значенийиз этих символов в качестве переменных вам необходимо вычислить список вычисляемых значений:
CL-USER 154 > '((+ 1 2))
((+ 1 2))
CL-USER 155 > (list (+ 1 2))
(3)
CL-USER 160 > (list *node-1* *node-2*)
(#<NODE 402032A2C3> #<NODE 402032B98B>)
CL-USER 161 > (mapcar #'type-of *)
(NODE NODE)
Функция list
создает новый список со своими аргументами в качестве содержимого.
Получениезначение символа: используйте SYMBOL-VALUE
(symbol-value '*node-1*)