이 프로시저로 쌍을 만들고, 리스트나 벡터의 원소를 읽고, 벡터의 내용을 바꿀 수 있습니다. 표에서 필요한 인자와 결과, 오류를 찾아보세요.
원소 읽기
각 예제를 플레이그라운드에 붙여 넣고 실행하세요.
(list (list-ref (list 10 20 30) 1) (vector-ref #(4 5) 0))결과
(20 4)인덱스는 0부터 시작합니다. list-ref는 리스트의 두 번째 원소 20을 읽습니다. vector-ref는 벡터의 첫 번째 원소 4를 읽습니다.
쌍, 벡터, 문자열, 바이트벡터는 다른 값이나 문자, 바이트를 담으므로 복합 값이라고 부릅니다.
벡터 바꾸기
(define v (vector 4 5))
(define same v)
(vector-set! v 0 9)
(list (vector-ref same 0) (eq? v same))결과
(9 #t)vector-set!은 v의 첫 번째 원소를 바꿉니다. same도 그 벡터를 가리키므로 바뀐 원소를 읽습니다. 벡터의 객체 동일성은 그대로이므로 eq?의 결과는 #t입니다.
vector-set!이 돌려주는 값은 0개입니다. 예제는 그 뒤에 벡터를 읽어 바뀐 내용을 보여 줍니다.
변경할 벡터는 vector나 vector-copy로 만드세요. #(4 5) 같은 벡터 리터럴과 인용한 벡터는 불변입니다. 바꾸려고 하면 E312가 납니다. 현재 언어 프로파일에서 쌍과 바이트벡터도 불변입니다.
호출 방법과 오류
아래 표의 k는 0부터 시작하는 정확 정수 인덱스입니다. 올바른 리스트는 쌍을 이어 붙여 빈 리스트 ()로 끝나는 값이거나 빈 리스트 자체입니다.
| 호출 | 결과 | 잘못된 인자 |
|---|---|---|
(cons a d) | a와 d를 담은 새 쌍 | 어떤 값이든 두 개 받음 |
(car pair) / (cdr pair) | 저장된 첫 번째 / 두 번째 부분 | 쌍이 아니면 E310 |
(list-ref proper-list k) | 인덱스 k의 원소 | 올바른 리스트가 아니거나 k가 정확 정수가 아니면 E312, 인덱스가 범위 밖이면 E311 |
(vector-ref vector k) | 인덱스 k의 원소 | 타입이 틀리면 E312, 인덱스가 범위 밖이면 E311 |
(vector-set! vector k value) | 값 0개, 기존 벡터의 원소를 바꿈 | 타입이 틀리거나 불변 벡터이면 E312, 인덱스가 범위 밖이면 E311 |
(bytevector-u8-ref bytevector k) | 0부터 255까지의 정확 정수 | 타입이 틀리면 E312, 인덱스가 범위 밖이면 E311 |
오류는 프로시저마다 다릅니다. 예를 들어 car에 쌍이 아닌 값을 주면 E310이 납니다. list-ref에 올바른 리스트가 아닌 값을 주면 E312가 납니다.
다른 연산 찾기
| 할 일 | 프로시저 |
|---|---|
| 리스트와 쌍 만들기 | list, make-list, cons |
| 일부 읽기 | car, cdr, 둘을 조합한 cadr 등, list-ref, list-tail |
| 검색하기 | member, memv, memq, assoc, assv, assq |
| 리스트 복사, 연결, 뒤집기 | list-copy, append, reverse |
| 벡터 만들기, 복사, 원소별 변환 | vector, make-vector, vector-copy, vector-map |
데이터와 복합 값에서 값의 형태를 설명합니다. 비교 방법은 같은지 비교하기에 있습니다. 다른 프로시저 계열은 프로시저 색인에서 찾아보세요.