이 프로시저들로 문자열을 변환하고, 문자를 비교하고, 바이트를 하나씩 읽을 수 있습니다. 예제에서 대소문자 변환으로 문자열 길이가 바뀌는 경우와 숫자로 인식하는 문자의 범위를 확인하세요.
문자열 변환과 바이트 읽기
아래 예제 전체를 플레이그라운드에서 실행하세요.
(list (string-upcase "Lispex") (char-numeric? #\7) (bytevector-u8-ref #u8(65) 0))결과
("LISPEX" #t 65)첫 호출은 문자열을 대문자로 바꿉니다. 둘째 호출은 문자 #\7이 숫자인지 확인합니다. 셋째 호출은 #u8(65)의 첫 바이트를 읽습니다. 위치는 0부터 셉니다.
문자열 변환과 문자 변환 구별하기
(list (string-upcase "Straße")
(char-upcase #\ß)
(char-ci=? #\A #\a)
(char-ci=? #\ς #\σ)
(string-ci=? "Straße" "STRASSE"))결과
("STRASSE" #\ß #t #f #f)문자열의 대소문자 변환은 유니코드 규칙을 따르며 길이가 바뀔 수 있습니다. 여기서 string-upcase는 ß를 SS로 바꿉니다. 문자 변환은 문자 하나를 돌려주므로 char-upcase는 #\ß를 그대로 둡니다.
char-ci=?와 string-ci=?의 ci는 대소문자를 구별하지 않는다는 뜻입니다. 이 프로시저들은 소문자로 바꾼 뒤 비교합니다. ASCII 문자 A부터 Z를 a부터 z와 같게 보므로 셋째 결과는 #t입니다.
일부 유니코드 문자는 소문자로 바꾸기만 해서는 같아지지 않습니다. 그리스 문자 끝 시그마 ς와 시그마 σ는 이 비교에서 서로 다릅니다. "Straße"와 "STRASSE"도 다르므로 두 비교의 결과는 #f입니다.
char-foldcase와 string-foldcase는 이 비교에 쓰는 소문자 변환을 수행합니다. 이는 대소문자 구별 없이 비교하기 위한 유니코드 케이스 폴딩의 근사 방식입니다.
문자 수 세기와 숫자 판별하기
#\A나 #\한 같은 문자는 유니코드 스칼라 값 하나입니다. 문자열은 이런 문자들을 이어 놓은 값입니다. 문자열의 위치는 UTF-8 바이트가 아닌 문자 수로 셉니다.
| 호출 | 결과 | 뜻 |
|---|---|---|
(string-ref "한A" 0) | #\한 | 첫 문자 |
(string-length "한A") | 2 | 문자 두 개 |
(char-numeric? #\7) | #f | 전각 숫자는 ASCII 숫자가 아님 |
(char-alphabetic? #\한) | #t | 글자인지 판별할 때 유니코드를 사용 |
char-numeric?는 #\0부터 #\9까지만 숫자로 인식합니다. 글자, 공백, 대문자, 소문자를 판별하는 프로시저들은 유니코드 속성을 사용합니다. 문자 비교는 유니코드 스칼라 값 순서를 따릅니다.
인자와 결과 확인하기
문자열은 만들기, 복사, 연결, 비교, 매핑을 지원하며 리스트와 벡터로 상호 변환할 수 있습니다. 문자열과 바이트벡터의 내용은 바꿀 수 없습니다. 새 문자열을 만드는 연산은 입력을 그대로 둡니다.
| 호출 | 결과 | 입력 조건 |
|---|---|---|
(string-ref string k) | 문자 하나 | k는 0부터 길이보다 1 작은 값까지의 정확 정수. 잘못된 타입은 E312, 범위 초과는 E311 |
(string-append string ...) | 새 문자열 | 인자는 모두 문자열 |
(char-ci=? char char ...) | 불리언 | 문자 2개 이상을 위에서 설명한 방식으로 변환한 뒤 비교 |
(string-map proc string) | 새 문자열 | 문자열 1개를 받음. 왼쪽부터 proc를 호출하며 매번 정확히 문자 하나를 반환해야 함 |
(bytevector-u8-ref bytes k) | 0부터 255까지의 정확 정수 | k는 0부터 길이보다 1 작은 값까지의 정확 정수. 잘못된 타입은 E312, 범위 초과는 E311 |
바이트를 읽기 전에 bytevector-length로 바이트 수를 확인할 수 있습니다. 바이트벡터의 원소는 0부터 255까지입니다.
현재 버전은 문자열과 바이트벡터 읽기를 제공합니다. 문자열 변경, 바이트벡터 변경과 복사와 연결, UTF-8 인코딩과 디코딩 프로시저는 제공하지 않습니다.
관련 문서
데이터와 복합 값 타입에서 이 값들을 소개합니다. 다른 프로시저는 프로시저 색인에서 찾을 수 있습니다.