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