R6RS Scheme: 문자

R6RS Scheme: 문자

Unicode 스칼라 값(scalar value)을 나타내는 객체인 문자(character)와 그 연산을 설명해요. 문자 술어, 정수 변환, 그리고 문자 비교 순서를 다뤄요.

출처: 문서

본문

문자는 Unicode 스칼라 값 [27]을 나타내는 객체예요.

Note: Unicode는 표준의 최신 버전에서 Unicode 스칼라 값의 수열(범위 0부터 #x10FFFF까지, #xD800부터 #xDFFF까지의 범위를 제외한 정수)과 사람이 읽을 수 있는 "문자" 사이의 표준 매핑을 정의해요. 더 정확히 말하면, Unicode는 인간이 읽도록 인쇄되는 글리프(glyph)와, (때로는 주변 문자에 민감한 방식으로) 글리프에 매핑되는 추상적 개체인 문자 사이를 구별해요. 게다가 서로 다른 스칼라 값의 수열이 때로는 같은 문자에 대응해요. 스칼라, 문자, 글리프 사이의 관계는 미묘하고 복잡해요. 이런 복잡성에도 불구하고, 글을 읽을 줄 아는 인간이 "문자"라고 부를 대부분의 것은 단일 Unicode 스칼라 값으로 표현될 수 있어요(여러 Unicode 스칼라 값의 수열이 그 같은 문자를 나타낼 수는 있지만). 예를 들어 로마 문자, 키릴 문자, 히브리어 자음, 그리고 대부분의 한자는 이 범주에 들어가요.

Unicode 스칼라 값은 Unicode 코드 포인트(code point)의 범위의 일부인 #xD800부터 #xDFFF까지의 범위를 제외해요. 그러나 이 범위의 Unicode 코드 포인트, 즉 이른바 서로게이트(surrogate)는 UTF-16 인코딩의 산물이며 특정 Unicode 인코딩에서만, 그것도 스칼라 값을 인코딩하는 짝으로만 나타날 수 있어요. 결과적으로 모든 문자는 코드 포인트를 나타내지만, 서로게이트 코드 포인트는 문자로 표현되지 않아요.

(char? obj) — procedure

obj가 문자이면 #t를, 그렇지 않으면 #f를 반환해요.

(char->integer char) — procedure

(integer->char sv) — procedure

sv는 Unicode 스칼라 값, 즉 [0, #xD7FF] ∪ [#xE000, #x10FFFF]에 있는 음이 아닌 정확한 정수 객체여야 해요.

문자가 주어지면 char->integer는 그것의 Unicode 스칼라 값을 정확한 정수 객체로 반환해요. Unicode 스칼라 값 sv에 대해 integer->char는 그것과 연관된 문자를 반환해요.

(integer->char 32) ⇒ #\space
(char->integer (integer->char 5000)) ⇒ 5000
(integer->char #xD800)  ⇒ &assertion exception

(char=? char1 char2 char3 ...) — procedure

(char<? char1 char2 char3 ...) — procedure

(char>? char1 char2 char3 ...) — procedure

(char<=? char1 char2 char3 ...) — procedure

(char>=? char1 char2 char3 ...) — procedure

이 프로시저들은 문자의 집합에 그것들의 Unicode 스칼라 값에 따라 전체 순서(total ordering)를 부과해요.

(char=? #\a #\a)  ⇒ #t
(char<? #\z #\Z)  ⇒ #f

더 알아보기 (Learn more)

출처: Characters - R6RS