Скорее всего, вы не найдете личность, но сам объект только eq?
с самим собой и ничем иным.eq?
в основном сравнивает адрес расположения значений.Поэтому, если вам нужен идентификатор, вы можете просто сохранить весь объект в этом месте, и он будет уникальным.
Местоположение является обязательным.Думайте об этом как о адресе, который вы не можете получить, и адресе, который имеет адрес для объекта.Например.Привязка ((lambda (a) a) 10)
будет хранить местоположение адреса объекта 10
в первом стековом адресе, а код в теле просто возвращает тот же адрес.Местоположение может измениться на set!
, но вы никогда не получите его в памяти.
Обычно системы lisp хранят значения в указателях.Это означает, что некоторые типы и значения на самом деле не имеют объекта по адресу, но адрес содержит закодированные в нем значение и тип, которые знает система.Обычно маленькие целые числа, символы, символы и логические значения могут быть равны указателю, даже если они созданы в разное время.например.'(1 2 3)
будет использовать только 3 пары, а не пробел для значений 1-3 и ()
.