轨道
/
Common Lisp
Common Lisp
/
练习
/
字符研究
字符研究

字符研究

学习练习

简介

字符

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 正在做人类字母表项目,需要完成一些工作,于是想请你帮忙编写几个自己会用到的函数。

1. 比较字符

Lewis 需要一个函数来比较两个字符,判断第一个字符是大于、小于还是等于第二个字符。 编写一个函数compare-chars,它接受两个字符,并相应地求值为:greater-than、:less-than或:equal-to。 这个函数应按区分大小写的方式进行比较。

2. 确定字符的“大小”

Lewis 需要知道一个字符是“big”(大写字符)、“little”(小写字符),还是两者都不是的“no-size”。 编写一个函数size-of-char,它会根据字符的“大小”求值为:big、:small或:no-size:

3. 改变字符的“大小”

Lewis 可能需要把大写字符变小写,或把小写字符变大写。 编写一个函数change-size-of-char,它接受两个形参:一个字符和一个期望的大小(:big或:small)。 它应求值为大小正确的对应字符。

4. 确定字符的“类型”

Lewis 不仅需要知道字符的“大小”,还需要知道它的“类型”。 编写一个函数type-of-char:如果字符是字母字符,则求值为:alpha;如果是数字字符,则求值为:numeric;如果是空格字符,则求值为:space;如果是换行字符,则求值为:newline;否则求值为:unknown

通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Common Lisp Exercism

准备好开始 字符研究 了吗?

注册 Exercism,借助 27 个概念92 个练习 和真人导师指导,学习并掌握 Common Lisp,全部免费。