Мне интересно, почему в Common Lisp нет встроенного оператора равенства для сравнения объектов CLOS (стандартных классов). Например, "equalp" может применяться к массивам, структурам, хеш-таблицам, но не к объектам.
Я предполагаю, что новый тест, который спускается по объекту и проверяет, равны ли значения слотов, может быть написан программистом, но мне интересно, есть ли причина для того, чтобы это не было частью стандарта, поскольку я полагаю, что это довольно распространенная вещь для делать? Например, кажется, что тестовые функции для «make-hash-table» должны быть одной из встроенных *, поэтому я действительно не понимаю, как использовать объекты в качестве ключей или значений в хеш-таблице.
* Я заметил, что есть связанный вопрос (Использование Common Lisp CLOS-объекты как ключи в хеш-таблице?), однако на самом деле это не отвечает на мой вопрос.
Спасибо и ура!
M
EQ
(также работает с хеш-таблицами), либо вы хотите проверить, равен ли конкретный слот, что, естественно, требует вам написать свою собственную функцию сравнения. - person jkiiski   schedule 19.07.2016EQUAL?
, который выполняетEQUALP
для всего, кроме экземпляров классов (то естьSTANDARD-OBJECT
), и выполняетEQUAL?
для всех слотов (конечно, вы должны сначала проверить, принадлежат ли объекты к одному и тому же классу, а слоты граница). Медленно, но наверное то, что вы хотите в 99% случаев, - person mobiuseng   schedule 19.07.2016EQ
, который возвращает true, если его аргументы являются одним и тем же идентичным объектом? - person Student   schedule 19.05.2020