С здесь и слайды моего учителя
eq проверяет, являются ли его аргументы (представленные одним и тем же фрагментом памяти компьютера) одним и тем же символом.
Например:
(экв. ‘A‘ B) ноль
(eq ‘RAM‘ RAM) T
(eq (минусы a 'b) (минусы a' b ')); Это связано с тем, что для обоих минусов выполняются разные вызовы, поэтому им, очевидно, будут выделены разные фрагменты памяти
eql сначала проверяет, удовлетворяют ли его аргументы EQ, если нет, он пытается определить, соответствуют ли они
являются числами одного типа и значений.
Например:
(eql 4 4.0) NIL
(eql 4 4) T
Теперь обратите внимание на разницу :
(eq 4.0 4.0) NIL; Зависит от платформы, как описано в первом (принятом) ответе
(eql 4.0 4.0) T; тип и значение аргументов одинаковы
В некоторых реализациях (например, 4.0 4.0) может возвращаться значение true, поскольку в стандарте не указано, должна ли реализация хранить в памяти только одну копию чисел и символов, как это делается с символами). Как правило, большого пальца не используйте эквалайзер для цифр и символов , , если вы действительно не знаете, что делаете.
равно - функция сравнения «разумнее». Как правило, вы можете думать об этом как о том, чтобы сказать вам, выглядят ли два объекта одинаково (структурно схожи или изоморфны). Вероятно, это оператор, который вы хотите использовать для общего равенства. Он ведет себя как eql для чисел, символов и символов, но для списков (значений) и строк сообщает, что их элементы
Например:
(равно 4 4) T
(равно (+ 2 2) 4) T
Теперь обратите внимание на разницу
(eql (минусы 'a' b) (минусы 'a' b)) NIL
(равно (минусы 'a' b) (минусы 'a' b)) T; Равно, как правило, верно для вещей, которые печатают одинаково
равно похоже на равное, только более продвинутое. Сравнение чисел не зависит от типа. Сравнение символов и строк не учитывает регистр.
Например:
(равно (минусы 'а' б) (минусы 'а' б)) Т; такое же, как равно
Теперь обратите внимание на разницу
равно (4,0) NIL
равно (4,0) Т; Как equp обрабатывает тип чисел нечувствительно