문자열, 문자, 바이트벡터 프로시저

대소문자를 바꾸고, 문자를 비교하고, 문자열의 특정 위치와 0부터 255까지의 바이트 값을 읽습니다.

이 프로시저들로 문자열을 변환하고, 문자를 비교하고, 바이트를 하나씩 읽을 수 있습니다. 예제에서 대소문자 변환으로 문자열 길이가 바뀌는 경우와 숫자로 인식하는 문자의 범위를 확인하세요.

문자열 변환과 바이트 읽기

아래 예제 전체를 플레이그라운드에서 실행하세요.

LISPEX
(list (string-upcase "Lispex") (char-numeric? #\7) (bytevector-u8-ref #u8(65) 0))

결과

출력
("LISPEX" #t 65)

첫 호출은 문자열을 대문자로 바꿉니다. 둘째 호출은 문자 #\7이 숫자인지 확인합니다. 셋째 호출은 #u8(65)의 첫 바이트를 읽습니다. 위치는 0부터 셉니다.

문자열 변환과 문자 변환 구별하기

LISPEX
(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 인코딩과 디코딩 프로시저는 제공하지 않습니다.

관련 문서

데이터와 복합 값 타입에서 이 값들을 소개합니다. 다른 프로시저는 프로시저 색인에서 찾을 수 있습니다.