В чем разница между eq, eql, equal и equalp в Common Lisp?

Еще несколько примечаний:

  • Большинство common-lisp функций CL неявно используют equality EQL, когда не указан тест

  • См. также equality STRING-EQUAL, = и TREE-EQUAL

  • В syntax основе EQ обычно лежит сравнение common-lisp указателей

И приблизительное common-lisp руководство:

To compare against...      Use...

Objects/Structs            EQ

NIL                        EQ (but the function NULL is more concise and probably cheaper)

T                          EQ (or just the value but then you don't care for the type)

Precise numbers            EQL

Floats                     =

Characters                 EQL or CHAR-EQUAL

Lists, Conses, Sequences   EQ (if you want the exact same object)
                           EQUAL (if you just care about elements)

Strings                    EQUAL (case-sensitive), EQUALP (case-insensitive)
                           STRING-EQUAL (if you throw symbols into the mix)

Trees (lists of lists)     TREE-EQUAL (with appropriate :TEST argument)

Обратите внимание, что equality для повышения эффективности equality обычно EQ >> EQL >> EQUAL common-lisp >> EQUALP.

syntax

common-lisp

equality

2022-07-21T09:08:42+00:00