트랙
/
F#
F#
/
연습 문제
/
반짝반짝 깨끗이
반짝반짝 깨끗이

반짝반짝 깨끗이

학습 연습 문제

소개

F#의 char 타입은 텍스트에서 가장 작은 주소 지정 단위를 나타내는 16비트 값이고, 기본적으로 불변이에요.

char는 작은따옴표로 리터럴을 정의할 수 있어요:

let ch = 'A'
// => val ch: char = 'A'

문자열은 char가 나열된 것이에요.

개별 char는 0부터 시작하는 인덱스로 문자열에서 꺼낼 수 있어요:

"Exercism"[4] //  =>  'c'

문자열을 순회하면 각 단계마다 char를 반환해요.

다음 예제는 편의를 위해 고차 함수와 익명 함수를 사용했어요. 이 둘은 나중에 커리큘럼에서 제대로 다루지만, 지금은 문자열의 문자들을 순회하는 루프를 간결하게 쓰는 방법이라고 생각하면 돼요.

Seq.map (fun c -> c, int c) "F#"  //  =>  [('F', 70); ('#', 35)]

위에서 보았듯이 char는 int 값으로 변환할 수 있어요. 이건 다른 문자 체계에서도 (적어도 어떤 경우에는) 동작해요:

Seq.map (fun c -> c, int c) "東京"  //  =>  [('東', 26481); ('京', 20140)]

문자를 비교할 때는 그 바탕이 되는 Int16이 사용돼요:

'A' < 'D'  // =>  true

또한 int는 char로 변환할 수 있어요:

char 77  // => 'M'

System.Char 라이브러리에는 .NET 언어에서 기대하는 메서드가 모두 들어 있어요. 대소문자 변환 같은 것들이에요:

'a' |> System.Char.ToUpper  // =>  'A'

'Q' |> System.Char.ToLower  // =>  'q'

지침

이 연습 문제에서는 개발자가 식별자 이름을 정리할 수 있도록 돕는 유틸리티 함수 몇 가지를 구현해요.

6개의 과제를 통해 단일 문자를 변환하는 transform 함수와 문자열을 변환하는 clean 함수를 차근차근 완성해 나가요.

유효한 식별자는 0개 이상의 글자, 밑줄, 하이픈, 물음표, 이모지로 이루어져요.

clean 함수에 빈 문자열을 전달하면 빈 문자열이 반환되어야 해요.

1. 하이픈을 밑줄로 바꾸기

하이픈을 밑줄로 바꾸도록 transform 함수를 구현해요.

transform '-'  // => "_"

2. 모든 공백 제거하기

모든 공백 문자를 제거해요. 문자열 앞뒤의 공백도 포함돼요.

transform ' '  // => ""

3. camelCase를 kebab-case로 변환하기

transform 함수를 수정해 camelCase를 kebab-case로 변환해요.

transform 'D'  // => "-d"

4. 숫자인 문자 제외하기

transform 함수를 수정해 숫자인 문자는 제외해요.

transform '7'  // => ""

5. 그리스 소문자를 물음표로 바꾸기

transform 함수를 수정해 'α'부터 'ω'까지 범위의 그리스 문자를 바꿔요.

transform 'β' // => "?"

6. 이 연산들을 결합해 문자열에 적용하기

이 연산들을 문자열 전체에 적용하도록 clean 함수를 구현해요.

규칙을 벗어나는 문자는 바뀌지 않고 그대로 남아요.

clean "  a2b Cd-ω😀  " //  => "ab-cd_?😀"

문자로 문자열 조립하기

이 주제는 나중에 교육 과정에서 자세히 다뤄요.

지금은 String.collect라는 고차 함수가 있다는 점을 알아 두면 도움이 될 거예요. 이 함수는 여러분이 제공한 함수를 사용해 char 컬렉션을 문자열로 변환해요.

let transform ch = $"{ch}_"
String.collect transform "abc"  // =>  "a_b_c_"
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
F# Exercism

반짝반짝 깨끗이 문제를 시작해 볼 준비가 됐나요?

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