Вы не хотите: сборщик мусора может (и часто делает!) Перемещать объекты, поэтому адрес объекта может отличаться между наблюдениями.Другая проблема связана с непосредственными объектами (например, 1
или #\A
) - какими будут их адреса?!
При этом ANSI CL предлагает аргумент :identity
для print-unreadable-object
, который большинство интерпретирует как текущий адрес в памяти.
Увы, формат вывода зависит от реализации (например, SBCL переносит адрес в {}
), поэтому лучше найтизависящая от реализации функция, которая возвращает адрес.
Используя apropos
, мы легко находим
system::address-of
в CLISP; sb-kernel:get-lisp-obj-address
в SBCL.
PS.Проверьте sxhash
- это то, что вы ищете?