--- title: 等価性 author: kazu634 date: 2008-08-04 wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:4187;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - gauche - Lisp ---
「二つのオブジェクトAとBが等しいとはどういうことでしょうか?」これには色々な意味があるよ。
二つのリストがあった場合、それぞれの要素を順に比較し、全て等しければ元のリストも等しいという立場での比較。
gosh> (equal? (list 1 2 3) (list 1 2 3)) #t gosh> (equal? (list 1 2 (list 3 4) 5) (cons 1 (cons 2 '((3 4) . (5))))) #t gosh> (equal? (list 1 2 3) (list 1 2 4)) #f
他の値を入れておく入れ物の同一性を調べるもの。C言語を知っている人は、eq?はオブジェクトの「アドレス」を比較していると考えていい。
gosh> (eq? (cons 1 2) (cons 1 2)) #f gosh> (define p (cons 1 2)) p gosh> (eq? p p) #t
数値として比較する場合。
gosh> (eqv? 1 1) #t gosh> (eqv? 1.0 1.0) #t gosh> (eqv? 1 1.0) #f gosh> (= 1 1.0) #t gosh> (char=? #\a #\a) #t gosh> (char=? #\a #\A) #f gosh> (string=? "abc" "abc") #t gosh> (string=? "abc" "ABC") #f
- 「gauche」に関連する最近のエントリ