-
Notifications
You must be signed in to change notification settings - Fork 21
/
Copy path03.03 字符(Character)
60 lines (43 loc) · 1.87 KB
/
03.03 字符(Character)
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
3.3 字符(Character)
Racket字符对应于Unicode标量值。粗略地说,一个标量值是一个无符号整数,它的表示适合21位,并且映射到某种自然语言字符或字符块的某些概念。从技术上讲,标量值是比Unicode标准中的“字符”概念更简单的概念,但它是一种用于许多目的的近似值。例如,任何重音罗马字母都可以表示为一个标量值,就像任何普通的汉字一样。
虽然每个Racket字符对应一个整数,但字符数据类型和数值是有区别的。char->integer和integer->char程序在标量值和相应字符之间转换。
一个可打印字符通常在以#\作为代表字符后打印。一个不可打印字符通常在以#\u开始十六进制数的标量值打印。几个字符特殊打印;例如,空格和换行字符分别打印为#\space和#\newline。
例如:
> (integer->char 65)
#\A
> (char->integer #\A)
65
> #\λ
#\λ
> #\u03BB
#\λ
> (integer->char 17)
#\u0011
> (char->integer #\space)
32
display程序直接将字符写入当前输出端口(见《输入和输出》部分)( Input and Output),与用于打印字符结果的字符常量语法形成对照。
例如:
> #\A
#\A
> (display #\A)
A
Racket提供了几种分类和转换字符的程序。注意,然而,某些Unicode字符要如人类希望的那样转换只有在一个字符串中才行(例如,”ß”的大写转换或者”Σ”的小写转换)。
例如:
> (char-alphabetic? #\A)
#t
> (char-numeric? #\0)
#t
> (char-whitespace? #\newline)
#t
> (char-downcase #\A)
#\a
> (char-upcase #\ß)
#\ß
char=?程序比较两个或多个字符,char-ci=?比较忽略字符。eqv?和equal?程序的行为与char=?在字符方面的表现一样;当更具体地声明正在比较的值是字符时使用char=?。
例如:
> (char=? #\a #\A)
#f
> (char-ci=? #\a #\A)
#t
> (eqv? #\a #\A)
#f