Common Lisp 和其他编程语言一样,也有字符。 字符是对象,表示一段文本(例如字符串或文本流)中的一个单元。
字符可以和整数相互转换。(但字符不是整数,它们是一种独立的类型。)
字符表示为 #\ 后跟它的名字。
常见字符(例如 'A'、'b'、'9' 或 '!')的“名字”就是它本身,因此写作 #\A、#\b、#\9 和 #\!。
一些非图形字符,例如空格或换行,有着诸如 #\Space 和 #\Newline 这样的名字。
标准只要求实现支持 96 个字符:大小写拉丁字母(A-Za-z)、数字(0-9)、空格(#\Space)、换行(#\Newline)以及标点(例如 !$"'(),_-./:;?+<=>#%&*@[\]{|}`^~)。
不过,大多数实现提供的字符会更多,有些实现甚至提供所有 Unicode 字符。
可以用 char= 或 char-equal 比较字符是否相等(后者不区分大小写)。
可以用 char<、char>、char<=、char>= 等函数给字符排序,它们不区分大小写的版本是 char-lessp 和 char-greaterp。
字符可以分成不同类型:图形字符、字母字符、字母数字字符、数字字符、大写字符或小写字符。
一个字符可以属于多种类型,例如一个大写的字母字符。
每种类型都有对应的谓词:graphic-char-p、alpha-char-p、alphanumericp、digit-char-p、upper-case-p 和 lower-case-p。
有些字符可以是大写或小写,可以用 char-upcase 和 char-downcase 在两者之间转换。
年轻的 Lisp 外星人 Lewis 正在做人类字母表项目,需要完成一些工作,于是想请你帮忙编写几个自己会用到的函数。
Lewis 需要一个函数来比较两个字符,判断第一个字符是大于、小于还是等于第二个字符。
编写一个函数compare-chars,它接受两个字符,并相应地求值为:greater-than、:less-than或:equal-to。
这个函数应按区分大小写的方式进行比较。
Lewis 需要知道一个字符是“big”(大写字符)、“little”(小写字符),还是两者都不是的“no-size”。
编写一个函数size-of-char,它会根据字符的“大小”求值为:big、:small或:no-size:
Lewis 可能需要把大写字符变小写,或把小写字符变大写。
编写一个函数change-size-of-char,它接受两个形参:一个字符和一个期望的大小(:big或:small)。
它应求值为大小正确的对应字符。
Lewis 不仅需要知道字符的“大小”,还需要知道它的“类型”。
编写一个函数type-of-char:如果字符是字母字符,则求值为:alpha;如果是数字字符,则求值为:numeric;如果是空格字符,则求值为:space;如果是换行字符,则求值为:newline;否则求值为:unknown