김진영_
가입: 2009년 12월 9일 올린 글: 337
|
올려짐: 2010년9월14일 14:29 주제: 두 물건이 같은지 비교하는 방법 |
|
|
다음 시간에 실습할 내용이지만 숙제에 도움이 될까 하여 올려 봅니다.
= 연산은 수에 대해서만 정의가 되어 있습니다. 예를 들어
| 코드: | (= (+ 1 2 3) (* 1 2 3))
(= 3.14 3.141592) |
와 같은 사용은 가능하지만, 아래처럼
와 같은 사용은 불가능합니다.
수가 아닌 '물건' (object)들이 서로 같은지 다른지를 알기 위해서는
와 같은 함수를 이용하면 됩니다. 세 가지나 있는 이유는, '같다'에 대한 정의가 모두 다르기 때문입니다.
일반적으로 eq?가 가장 세밀하게 비교하고, equal?이 가장 관대하게 비교한다고 볼 수 있습니다. 엄밀하지는 않으나 개념적으로 이해하기 쉽게 설명해 보면, eq?는 '정말로' 두 물건이 같다고 할 수 있을 때만 같다고 보는 반면, equal?은 두 물건이 같아 보이는(출력하면 같게 출력되는) 것도 같다고 인정해 줍니다. 아래의 예를 참고하세요.
| 코드: | (define lst1 '(1 2))
(define lst2 '(1 2))
(eq? lst1 lst2)
; #f
(equal? lst1 lst2)
; #t |
보다 자세한 specification은 아래 문서를 참조하시고, 직접 여러 물건들을 비교해 보시면서 익혀 보시기 바랍니다.
http://www.gnu.org/software/mit-scheme/documentation/mit-scheme-ref/Equivalence-Predicates.html |
|