4.3 字符与字符串 (Strings and Characters)
字符串是字符组成的向量。我们用一系列由双引号包住的字符,来表示一个字符串常量,而字符 c
用 #\c
表示。
每个字符都有一个相关的整数 ── 通常是 ASCII 码,但不一定是。在多数的 Lisp 实现里,函数 char-code
返回与字符相关的数字,而 code-char
返回与数字相关的字符。
字符比较函数 char<
(小于), char<=
(小于等于), char=
(等于), char>=
(大于等于) , char>
(大于),以及 char/=
(不同)。他们的工作方式和 146 页(译注 9.3 节)比较数字用的操作符一样。
> (sort "elbow" #'char<)
"below"
由于字符串是字符向量,序列与数组的函数都可以用在字符串。你可以用 aref
来取出元素,举例来说,
> (aref "abc" 1)
#\b
但针对字符串可以使用更快的 char
函数:
> (char "abc" 1)
#\b
可以使用 setf
搭配 char
(或 aref
)来替换字符串的元素:
> (let ((str (copy-seq "Merlin")))
(setf (char str 3) #\k)
str)
如果你想要比较两个字符串,你可以使用通用的 equal
函数,但还有一个比较函数,是忽略字母大小写的 string-equal
:
> (equal "fred" "fred")
T
> (equal "fred" "Fred")
NIL
>(string-equal "fred" "Fred")
T
Common Lisp 提供大量的操控、比较字符串的函数。收录在附录 D,从 364 页开始。
有许多方式可以创建字符串。最普遍的方式是使用 format
。将第一个参数设为 nil
来调用 format
,使它返回一个原本会印出来的字符串:
> (format nil "~A or ~A" "truth" "dare")
"truth or dare"
但若你只想把数个字符串连结起来,你可以使用 concatenate
,它接受一个特定类型的符号,加上一个或多个序列:
> (concatenate 'string "not " "to worry")
"not to worry"
当前内容版权归 readthedocs 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 readthedocs .