Мне нужен способ создания имен узлов GraphViz из объектов CLOS таким образом, что каждый объект получает свой собственный узел, и если я изменю свои объекты и заново создаю Визуализация GraphViz, я получаю те же имена узлов для объектов, которые остаются (по сути) одинаковыми.Печать объекта как уникальной строки, возможно, используя ее адрес
Если я просто попробуйте напечатать мой объект, я получаю то, что почти хорошо (так как я никогда не переопределяю PRINT-OBJECT
для моего класса):
CL-USER> (format nil "~A" *g*)
"#<GREF {1002D22C81}>"
Есть ли способ, чтобы получить только что 1002D22C81
части в виде строки ? Затем я мог бы создать имена узлов GraphViz, например N1002D22C81
.
Или я должен обработать результат (format nil "~A" obj)
в виде строки, захватив часть между {}
?
Это, вероятно, дешевле для создания хеш-таблицы, а затем использовать '(setf (узел gethash (узел имен) * node-table *)) (или что-то, что вызывается аксессуром и таблицей). – Vatine
@Vatine: 'symbol-value' - это просто доступ к слоту; это определенно дешевле, чем поиск в хэш-таблице. – sds
Символ интернинга не является дешёвым. И поиск символа по имени (a la 'find-symbol') не дешевле, чем поиск в хэш-таблице. – Vatine