`NUMBER` — 숫자 시스템 클래스
NUMBER — 숫자 시스템 클래스
커먼 리스프에서 숫자를 다루려고 할 때, 그 숫자들이 전부 같은 취급을 받는 건 아니에요. 실수와 복소수는 서로 겹치지 않는 서로소(disjoint) 타입이라는 점부터 알고 가야 숫자 동등성 비교를 헷갈리지 않아요.
본문
클래스 우선순위 리스트 (Class Precedence List)
number, t
설명
number 타입은 수학적인 숫자를 나타내는 객체를 담는 타입이에요. 그리고 real 타입과 complex 타입은 number의 서로 겹치지 않는 서브타입이에요.
숫자 동등성을 비교하는 함수들을 구분해 둘 필요가 있어요.
- 함수
=는 숫자 값의 동등성을 검사해요. - 함수
eql은 두 인자가 모두 숫자일 때, 타입이 같고 숫자 값이 같은지를 함께 검사해요. - 반면
eq는 두 값이 같은 객체인지를 보는 훨씬 더 좁은 비교예요.eql이나=에서 같다고 나온 숫자라고 해서 반드시eq에서 같지는 않아요.
주의
커먼 리스프는 몇몇 명명에서 수학과 다르게 행동해요. 수학에서는 실수의 집합을 복소수의 부분집합으로 보는 게 전통인데, 커먼 리스프에서는 real 타입과 complex 타입이 서로소예요. 수학적인 복소수를 전부 포함하는 커먼 리스프 타입이 바로 number예요. 이렇게 달라진 이유는 역사적 선례, 다른 주류 프로그래밍 언어와의 호환성, 그리고 시간·공간 효율성 문제 등이 있어요.
함께 보기
real타입complex타입=함수,eql함수