문자 탐구

문자 탐구

학습 연습 문제

소개

문자

Common Lisp에도 다른 프로그래밍 언어와 마찬가지로 문자가 있어요. 문자는 텍스트 덩어리(예: 문자열이나 텍스트 스트림) 속의 항목 하나를 나타내는 객체예요.

문자는 정수로 변환하거나 정수에서 변환할 수 있어요. (하지만 문자가 정수인 것은 아니에요. 서로 다른 타입이거든요.)

문자는 #\ 뒤에 이름을 붙여서 나타내요. 'A'나 'b', '9', '!'처럼 흔한 문자의 '이름'은 그 문자 자체예요. 그래서 #\A, #\b, #\9, #\!라고 써요. 공백이나 줄 바꿈처럼 그래픽 문자가 아닌 문자에는 #\Space, #\Newline 같은 이름이 붙어요.

표준은 구현이 96개의 문자만 갖추면 된다고 요구해요. 대소문자 라틴 알파벳 문자(A-Za-z), 숫자(0-9), 공백(#\Space), 줄 바꿈(#\Newline), 그리고 구두점(예: !$"'(),_-./:;?+<=>#%&*@[\]{|}`^~)이에요. 하지만 대부분의 구현은 그보다 더 많은 문자를 제공해요. 모든 유니코드 문자를 제공하는 구현도 있어요.

문자 비교하기

문자가 같은지 비교할 때는 char=나 char-equal을 써요. (char-equal은 대소문자를 구분하지 않아요.)

문자의 순서는 char<, char>, char<=, char>= 같은 함수와, 대소문자를 구분하지 않는 char-lessp, char-greaterp로 비교할 수 있어요.

문자의 타입

문자는 그래픽, 알파벳, 영숫자, 숫자, 대문자, 소문자 같은 여러 타입으로 나눌 수 있어요. 대문자 알파벳 문자처럼 여러 타입에 동시에 속하는 문자도 있어요. 이런 타입마다 판별 함수가 있어요: graphic-char-p, alpha-char-p, alphanumericp, digit-char-p, upper-case-p, lower-case-p.

문자 대소문자 변환하기

어떤 문자에는 대문자와 소문자가 따로 있고, char-upcase와 char-downcase로 서로 변환할 수 있어요.

지침

어린 Lisp 외계인 Lewis는 인간 알파벳 프로젝트 작업을 좀 해야 해서, 필요한 함수 몇 개를 프로그래밍하는 것을 도와줄 수 있는지 물어봐요.

1. 문자 비교하기

Lewis는 두 문자를 비교해서 첫 번째가 두 번째보다 큰지, 작은지, 같은지를 판단하는 함수가 필요해요. 두 문자를 받아서 각각 :greater-than, :less-than, :equal-to로 평가하는 compare-chars 함수를 작성해요. 이 함수는 대소문자를 구분해서 비교해야 해요.

2. 문자의 "크기" 알아내기

Lewis는 문자가 "큰" 문자(대문자)인지 "작은" 문자(소문자)인지, 둘 다 아니면 "크기 없음"인지 알아야 해요. 문자의 "크기"에 따라 :big, :small 또는 :no-size로 평가하는 size-of-char 함수를 작성해요:

3. 문자의 "크기" 바꾸기

Lewis는 큰 문자를 작게 만들거나 작은 문자를 크게 만들어야 할 수도 있어요. 문자와 원하는 크기(:big 또는 :small) 두 매개변수를 받는 change-size-of-char 함수를 작성해요. 이 함수는 올바른 크기에 해당하는 문자로 평가되어야 해요.

4. 문자의 "유형" 알아내기

Lewis는 문자의 "크기"뿐만 아니라 "유형"도 알아야 해요. type-of-char 함수를 작성해요. 이 함수는 문자가 알파벳 문자면 :alpha, 숫자 문자면 :numeric, 공백 문자면 :space, 개행 문자면 :newline, 그 외에는 :unknown으로 평가해요

GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Common Lisp Exercism

문자 탐구 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Common Lisp 트랙을 개념 27개연습 문제 92개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.