符号 / 字符 / 字符串
最后更新于:2022-04-02 02:05:57
[TOC]
## 符号
符号是一种不变的字符串
Lisp/Scheme程序设计语言中极具特色的数据类型——符号
符号是一种通过地址管理字符串的数据。
符号可以被如`eq?`这样运行**迅速**地函数处理,
而纯字符串需要被更慢的`equal?`处理。
由于符号可以被快速比较,它们被用于做关联表和哈希表的键
符合可用于不可变场景
```
(symbol? x) 判断是否是符号
(string->symbol str) 字符串转符号
(symbol->string sym) 符号转为字符串
(symbol=? sym sym) //比较符号是否相同
(eq? sym sym) //同上 比较符号是否相同
```
```
(string->symbol "hello") // 'hello
(eq? (string->symbol "Hello") 'Hello) //#true
(eq? (string->symbol "Hello") (string->symbol "Hello")) //#true
(symbol->string (string->symbol "Hello")) // "hello" 符号转字符串
(define x (string->symbol "hello"))
(symbol? x) //#t
(symbol=? 'Hello 'Hello) // #true
```
## 字符与字符串
> [完整函数](https://deathking.github.io/yast-cn/contents/chapter11.html)
### 字符
在某个字符前添加#\来表明该物是一个字符
```
#\a 表示字符a。
#\Space 空格(Space
#\Tab 制表符(Tab)
#\Linefeed Linefeed
#\Return (Return)
```
字符函
```
(char? obj) 是字符则返回 #t
(char=? c1 c3) 是否是同一个字符
(char->integer c) 将c转化为对应的整数(字符代码,character code)
(char> c1 c2), 比较字符代码的大小
(char-upper-case? c) 是否是大写
(char-upcase c) 返回字符的大写
```
### 字符串
* 字符串(string)是第2种形式的符号数据,和符号不同的是,字符串不是原子数据,而是复合数据
字符串常用函数
```
(string? s) 是否是字符串
(string-length s) 返回 s 的长度
(string=? s1 s2) 字符串比较
(substring s start end) 字符串截取
(string-append s1 s2 ...) 连接多个字符串
(string->list s) 将字符串转为 字符表
(string->list "hello") -> '(#\h #\e #\l #\l #\o)
(string-copy s) (let ((y (string-copy "hello"))) y) -> "hello"
```
';