언제 필요한가요?
습관이 아니라 의도에 따라 동등성을 고르세요. 수에는 수학적 동등성, 원자 값이나 같은 집합 객체에는 동일성 계열, 데이터 구조에는 깊은 동등성이 맞습니다.
실행으로 확인하기
LISPEX
(list (= 2 2.0) (eqv? 2 2.0) (equal? (list 1 2) (list 1 2)))관측 결과
OUTPUT
(#t #f #t)예제 읽기
=는 정확수 2와 부정확수 2.0을 같은 수학적 수로 봅니다. eqv?는 정확성 차이를 보존합니다. 따로 만든 두 리스트는 같은 객체가 아니지만 equal?은 같은 내용을 확인합니다.
이 순서로 생각하세요
- 이 프로필에서
eq?와eqv?는 원자에 대해 같고 집합은 동일성으로 비교합니다. eqv?와equal?는 정확성에 민감하여 정확2와 부정확2.0은 다릅니다.equal?는 순환 탐지와 함께 쌍, 벡터, 바이트벡터, 문자열을 깊게 비교합니다.
빠르게 고르기
| 술어 | 쓸 때 | 집합 값 동작 |
|---|---|---|
= | 수의 수학적 동등성 | 수가 아니면 도메인 오류 |
eq? | 원자 값과 객체 동일성 | 같은 집합 객체만 참 |
eqv? | 정확성에 민감한 원자 값과 동일성 | 같은 집합 객체만 참 |
equal? | 중첩 데이터 내용 | 순환에서도 끝나는 재귀 구조 비교 |
== / != | 읽기 쉬운 구조 비교 별칭 | equal?과 그 부정 |
흔한 오해
=는 수만 받으며 ==, !=는 구조적 별칭입니다.
현재 경계
- 프로시저 동등성은 본문을 구조적으로 비교하지 않습니다.
다음으로
어떤 값이 동일성을 갖는지는 데이터 타입에서, 별도 객체를 만드는 생성자는 집합 프로시저에서 확인하세요.