Common Lisp¶
Equality¶
function | comparison |
---|---|
= | value of numbers |
eq | memory address |
eql | memory address, than type & value of numbers |
equal | structure, values |
equalp | like equal, but type insensitive for numbers, case insensitive for char/strings |
=¶
just compares value of numbers
(= 4 4.0)
=> T
(= 6/4 1.5)
=> T
(= 'r 't)
=> *** - =: R is not a number
(= 4.0 #c(4.0 0))
=> T
eq¶
看是不是同個 memory address
eq 因為比的是 memory address,所以一些結果會是 implementation-dependent, 例如 numbers 或 characters 可能會是同個 address
(eq 1 1)
=> T
(eq 'a 'a)
=> T
(eq '(1) '(1))
=> NIL
(eq '(a) '(a))
=> NIL
(setq x (cons 'a 'b))
=> (A . B)
(setq y x)
=> (A . B)
(eq x y)
=> T
(eq x (cons 'a 'b))
=> NIL
(eq (cons 'a 'b) (cons 'a 'b))
=> NIL
eql¶
先看是不是同個 memory address,不是的話再檢查是否為同 type 和 value 的 numbers
(同 type、value 的 number 會不會是同個 memory address 要看實作)
equal¶
檢查是否為同樣結構、有相同 value 的 objects
(eql (cons 'a 'b) (cons 'a 'b))
=> NIL
(equal (cons 'a 'b) (cons 'a 'b))
=> T
equalp¶
類似 equal,但是 numbers 是 type insensitive,chars 或 strings 是 case insensitive
(equal 1 1.0)
=> NIL
(equalp 1 1.0)
=> T
(equal "a" "A")
=> NIL
(equalp "a" "A")
=> T