Land Of Lisp 第4章 (比較関数の実施例)

例.xyzzyでの実施例
eqはシンボルだけと言いながら意外と比較しています。取りあえず、使い分けはしようと思いますが。

;シンボル
(equalp 'a 'a)
t
(equal 'a 'a)
t
(eql 'a 'a)
t
(eq 'a 'a)
t
(= 'a 'a)
不正なデータ型です: a: number
(string-equal 'a 'a)
t
(char-equal 'a 'a)
不正なデータ型です: a: character

;リスト
(equalp (list 1 2) (list 1 2))
t
(equal (list 1 2) (list 1 2))
t
(eql (list 1 2) (list 1 2))
nil
(eq (list 1 2) (list 1 2))
nil
(= (list 1 2) (list 1 2))
不正なデータ型です: (1 2): number
(string-equal (list 1 2) (list 1 2))
不正なデータ型です: (1 2): string
(char-equal (list 1 2) (list 1 2))
不正なデータ型です: (1 2): character

;コンス
(equalp (cons 2 3) (cons 2 3))
t
(equal (cons 2 3) (cons 2 3))
t
(eql (cons 2 3) (cons 2 3))
nil
(eq (cons 2 3) (cons 2 3))
nil
(= (cons 2 3) (cons 2 3))
不正なデータ型です: (2 . 3): number
(string-equal (cons 2 3) (cons 2 3))
不正なデータ型です: (2 . 3): string
(char-equal (cons 2 3) (cons 2 3))
不正なデータ型です: (2 . 3): character

;数字(整数)
(equalp 1 1)
t
(equal 1 1)
t
(eql 1 1)
t
(eq 1 1)
t
(= 1 1)
t
(string-equal 1 1)
不正なデータ型です: 1: string
(char-equal 1 1)
不正なデータ型です: 1: character

;数字(整数と小数)
(equalp 1 1.0)
t
(equal 1 1.0)
nil
(eql 1 1.0)
nil
(eq 1 1.0)
nil
(= 1 1.0)
t
(string-equal 1 1.0)
不正なデータ型です: 1: string
(char-equal 1 1.0)
不正なデータ型です: 1: character

;文字列
(equalp "aa" "aa")
t
(equal "aa" "aa")
t
(eql "aa" "aa")
nil
(eq "aa" "aa")
nil
(= "aa" "aa")
不正なデータ型です: "aa": number
(string-equal "aa" "aa")
t
(char-equal "aa" "aa")
不正なデータ型です: "aa": character

;文字列(大文字と小文字)
(equalp "AA" "aa")
t
(equal "AA" "aa")
nil
(eql "AA" "aa")
nil
(eq "AA" "aa")
nil
(= "AA" "aa")
不正なデータ型です: "AA": number
(string-equal "AA" "aa")
t
(char-equal "AA" "aa")
不正なデータ型です: "AA": character

;文字
(equalp #\a #\a)
t
(equal #\a #\a)
t
(eql #\a #\a)
t
(eq #\a #\a)
t
(= #\a #\a)
不正なデータ型です: #\a: number
(string-equal #\a #\a)
t
(char-equal #\a #\a)
t