字符串
以前只介绍了 表 和 数 ,因为它们在 Scheme 中最为常用。然而,Scheme也有像 字符 、 字符串 、 符号 、 向量 等的其它数据类型
字符
在某个字符前添加 #\ 来表明它是一个 字符
例如: #\a 表示字符 a #\Space 表示 空格 #\Tab 表示 制表符 #\Linefeed 表示 Linefeed #\Return 表示回车
R5RS 中定义了下面的与字符相关的函数:
- (char? obj) :如果 obj 是一个 字符 则返回 #t
- (char=? c1 c3) : 如果 c1 和 c2 是 同一个字符 的话则返回 #t
- (char->integer c) : 将 c 转化为对应的 整数 (character code)
(char->integer #\a) ; 97
- (integer->char n) : 将一个 整数 转化为对应的 字符
- 比较字符:
- (char<? c1 c2)
- (char<= c1 c2)
- (char> c1 c2)
- (char>= c1 c2)
实际上是比较的 字符代码的大小 例如,(char<? c1 c2)等同于(< (char->integer c1) (char->integer c2))
- (char-ci=? c1 c2)
- (char-ci<? c1 c2)
- (char-ci<=? c1 c2)
- (char-ci>? c1 c2)
- (char-ci>=? c1 c2)
这些比较函数对大小写不敏感
- 这些函数分别用于检测字符 c 是否为 字母 、 数字 、 空白符 、 大写字母 或 小写字母
- (char-alphabetic? c)
- (char-numeric? c)
- (char-whitespace? c)
- (char-upper-case? c)
- (char-lower-case? c)
- 这些函数分别返回字符 c 对应的 大写 或 小写
- (char-upcase c)
- (char-downcase c)
字符串
字符串 通过两个 闭合的双引号 表示:
例如,"abc" 表示字符串 abc
R5RS 定义了下面的函数:
- (string? s):如果 s 是一个 字符串 则返回 #t
- (make-string n c) : 返回由 n个 字符 c 组成的 字符串 。参数 c 可选
- (string-length s) : 返回字符串 s 的 长度
- (string=? s1 s2) : 如果字符串 s1 和 s2 相同 的话则返回 #t
- (string-ref s idx) : 返回字符串 s 中 索引 为 idx 的字符(索引从 0 开始计数)
- (string-set! s idx c) : 将字符串 s 中 索引 为 idx 的字符 设置 为 c
- (substring s start end) : 返回字符串 s 从 start 开始到 end - 1 处的 子字符串
(substring "abcdefg" 1 4) ; "bcd"
- (string-append s1 s2 …) : 连接 两个字符串 s1 和 s2
- (string->list s) : 将字符串 s 转换为由 字符构成的表
- (list->string ls) : 将一个由 字符构成的表 转换为 字符串
- (string-copy s) : 复制 字符串 s