[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" ```