언제 필요한가요?
하려는 일을 가장 잘 드러내는 작은 값 형태를 고르세요. 사실 하나에는 원자 값, 순서가 있는 데이터에는 올바른 리스트, 인덱스로 바꿔 쓰는 칸에는 벡터, 제한된 바이트에는 바이트벡터가 알맞습니다.
실행으로 확인하기
LISPEX
(list (vector? #(1 2)) (bytevector? #u8(1 2)) (pair? (cons 1 2)))관측 결과
OUTPUT
(#t #t #t)예제 읽기
예제는 서로 다른 집합 값 세 개에 타입 술어를 하나씩 적용합니다. 생성자마다 문서에 적힌 종류의 값을 만들므로, 결과는 참 세 개가 든 리스트입니다.
이 순서로 생각하세요
- 현재 프로필에서 쌍과 문자열, 바이트벡터는 불변입니다. 벡터와 어휘 셀은 변경할 수 있습니다.
- 인용한 집합 데이터는 불변입니다. 생성자는 문서에 적힌 동일성 규칙을 따르는 런타임 집합을 만듭니다.
- 부적절한 구조와 순환 구조는 올바른 리스트와 구분됩니다. 깊은 동등성 비교는 순환이 있어도 끝납니다.
빠르게 고르기
| 값 계열 | 대표 표기 | 현재 프로필의 변경 가능성 |
|---|---|---|
| 원자 값 | #t, 42, 2/3, name, #\\a | 해당 없음 |
| 리스트 / 쌍 | (list 1 2), (cons 1 2) | 불변 |
| 문자열 | "hello" | 불변 |
| 벡터 | #(1 2) 또는 (vector 1 2) | 칸 변경 가능 |
| 바이트벡터 | #u8(1 2) | 불변 |
| 프로시저 | (lambda (x) x) | 호출 가능한 값, 본문은 데이터가 아님 |
흔한 오해
복소수와 포트, 레코드, 변경 가능한 쌍과 문자열은 현재 프로필 밖입니다.
현재 경계
- 내부 결과와 신호, 미초기화 센티널은 게스트 값이 아닙니다.
다음으로
생성자와 접근자는 리스트·집합 프로시저에 있습니다. 동일성 비교와 구조 비교의 차이는 동등성에서 확인하세요.