티스토리 뷰
부록 B. 문자, 문자열, 이스케이프 규칙
이 부록은 비 아스키 문자를 하스켈 문자와 문자열에 사용하는 이스케이프 규칙을 다룹니다. 하스켈의 이스케이프 규칙은 C언어에서 쓰는 방식을 따르지만, 거기에 대해 좀 부연하겠습니다.
문자와 문자열 나타내기
아스키 작은 따옴표 '
로 감싼 문자 하나는 Char
타입을 가집니다.
ghci>
'c'
'c'ghci>
:type 'c'
'c' :: Char
문자열 상수는 큰 따옴표 "
로 감싸고, [Char]
타입을 가집니다 (보통 String
으로 씁니다).
ghci>
"a string literal"
"a string literal"ghci>
:type "a string literal"
"a string literal" :: [Char]
큰따옴표 문자열은 단지 리스트 표기법의 설탕 구문입니다.
ghci>
['a', ' ', 's', 't', 'r', 'i', 'n', 'g'] == "a string"
True
다국어 지원
하스켈은 Char
데이터 타입을 위해 내부적으로 유니코드를 사용합니다. String
은 [Char]
, 즉 Char
리스트이기에 문자열에도 또한 유니코드를 씁니다.
각각의 하스켈 구현은 소스 파일에서 쓸 수 있는 문자 집합에 제한을 둡니다. GHC는 UTF-8 소스파일을 허용하기에 문자나 문자열 상수로 UTF-8 상수를 쓸 수 있습니다. UTF-8을 소스파일에 쓰면 다른 하스켈 구현은 파싱할 수 없을 수도 있기에 유의해야 합니다.
ghci 인터프리터를 실행 중일 땐 키보드로 입력한 비아스키 문자나 문자열은 잘 다루지 못할 수도 있습니다.
텍스트 이스케이핑
일부 문자는 문자나 문자열 상수로 표현할 때 반드시 이스케이프되어야 합니다. 예를 들어, 큰따옴표 문자는 문자열 안에서 이스케이프하지 않으면 문자열의 끝으로 간주되기 때문에 이스케이프가 필요합니다.
단일 문자 이스케이프 코드
하스켈은 기본적으로 C언어와 다른 유명한 언어의 단일 이스케이프 문자를 사용합니다.
표 B.1. 단일 문자 이스케이프 코드
이스케이프 | 유니코드 | 문자 |
---|---|---|
\0
|
U+0000 | 널 문자 |
\a
|
U+0007 | 비프음 |
\b
|
U+0008 | 백스페이스 |
\f
|
U+000C | 폼 피드 |
\n
|
U+000A | 개행 (라인 피드) |
\r
|
U+000D | 커리지 리턴 |
\t
|
U+0009 | 수평 탭 |
\v
|
U+000B | 수직 탭 |
\"
|
U+0022 | 큰따옴표 |
\&
|
n/a | 빈 문자열 |
\'
|
U+0027 | 작은 따옴표 |
\\
|
U+005C | 백슬래시 |
여러 줄 문자열 상수
여러 줄에 걸쳐 문자열을 쓰고 싶을 땐, 한 줄을 백슬래시로 끝내고, 다시 백슬래시로 문자열을 시작하면 됩니다. 아무 종류의 공백이든 두 백슬래시 사이에 넣어도 됩니다.
"this is a \ \long string,\ \ spanning multiple lines"
아스키 제어 문자
하스켈은 두 글자나 세 글자의 아스키 제어문자 약어를 인식합니다.
표 B.2. 아스키 제어 문자 약어
이스케이프 | 유니코드 | 의미 |
---|---|---|
\NUL
|
U+0000 | 널 문자 |
\SOH
|
U+0001 | start of heading |
\STX
|
U+0002 | start of text |
\ETX
|
U+0003 | end of text |
\EOT
|
U+0004 | end of transmission |
\ENQ
|
U+0005 | enquiry |
\ACK
|
U+0006 | acknowledge |
\BEL
|
U+0007 | bell |
\BS
|
U+0008 | 백스페이스 |
\HT
|
U+0009 | 수평 탭 |
\LF
|
U+000A | 라인 피드 (개행) |
\VT
|
U+000B | 수직 탭 |
\FF
|
U+000C | 폼 피드 |
\CR
|
U+000D | 커리지 리턴 |
\SO
|
U+000E | 시프트 아웃 |
\SI
|
U+000F | 시프트 인 |
\DLE
|
U+0010 | data link escape |
\DC1
|
U+0011 | device control 1 |
\DC2
|
U+0012 | device control 2 |
\DC3
|
U+0013 | device control 3 |
\DC4
|
U+0014 | device control 4 |
\NAK
|
U+0015 | negative acknowledge |
\SYN
|
U+0016 | synchronous idle |
\ETB
|
U+0017 | end of transmission block |
\CAN
|
U+0018 | cancel |
\EM
|
U+0019 | end of medium |
\SUB
|
U+001A | substitute |
\ESC
|
U+001B | escape |
\FS
|
U+001C | file separator |
\GS
|
U+001D | group separator |
\RS
|
U+001E | record separator |
\US
|
U+001F | unit separator |
\SP
|
U+0020 | 스페이스 |
\DEL
|
U+007F | delete |
컨트롤 첨부 문자 이스케이프
하스켈은 키보드의 컨트롤키를 다른 키와 같이 눌렀을 때 나오는 옛날 나오던 문자를 연상시키는, 제어 문자에 대한 다른 표기법을 인식합니다. 이 시퀀스는 \^
뒤에 기호나 알파벳 대문자가 따라옵니다.
표 B.3. 컨트롤 문자 코드
이스케이프 | 유니코드 | 의미 |
---|---|---|
\^@
|
U+0000 | 널 문자 |
\^A 에서 \^Z 까지
|
U+0001에서 U+001A까지 | 제어 코드 |
\^[
|
U+001B | escape |
\^\
|
U+001C | file separator |
\^]
|
U+001D | group separator |
\^^
|
U+001E | record separator |
\^_
|
U+001F | unit separator |
'지식저장소 > 읽은 책 요약' 카테고리의 다른 글
Game Design, Not Gamification, for Great Products 요약 (0) | 2020.04.12 |
---|---|
Real World Haskell 15장 번역: 모나드로 프로그래밍하기 (0) | 2015.02.01 |
Real World Haskell 14장 번역: 모나드 (0) | 2015.01.25 |
Real World Haskell 9장 번역 (0) | 2015.01.16 |
Practical Programming in Tcl and Tk 4th 요약 - chap25. Pack관리자 (0) | 2013.03.24 |
- Total
- Today
- Yesterday
- V3 Lite
- Kotlin
- intellisense
- MSVC2013
- Rust
- Code Snippet
- Notion
- WSL
- novel review
- coroutine
- Windows Defender
- IntelliJ
- CLion
- getch()
- MSVC
- hooks
- game design
- C/C++
- C++11
- gram
- MSVC 2017 RC
- error highlighting
- JWT
- Haskell
- Authentication
- software compraison
- Qt5
- React
- SHAREX
- Deemo
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |