LISP - 字符 - Lisp教程

在LISP中,字符被表示为字符类型的数据对象。

可以记#前字符本身之前的字符的对象。例如,#一个表示字符a。

空格和其它特殊字符可以通过#前面的字符的名称前表示。例如,#空格代表空格字符。

下面的例子演示了这一点:

示例

创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:

(write 'a)
(terpri)
(write #a)
(terpri)
(write-char #a)
(terpri)
(write-char 'a)

当执行以上代码,它返回以下结果:

A
#a
a
*** - WRITE-CHAR: argument A is not a character

特殊字符

Common Lisp允许使用以下特殊字符在代码。他们被称为半标准字符。

  • Backspace

  • Tab

  • Linefeed

  • Page

  • Return

  • Rubout

字符比较函数

数字比较函数和运算符,如,< 和 >上字符不工作。 Common Lisp提供了另外两组的功能,在代码中比较字符。

一组是区分大小写的,而另一个不区分大小写。

下表提供的功能:

Case Sensitive Functions Case-insensitive Functions 描述
char= char-equal 检查如果操作数的值都相等与否,如果是的话那么条件为真。
char/= char-not-equal 检查如果操作数的值都不同,或没有,如果值不相等,则条件为真。
char< char-lessp 检查如果操作数的值单调递减。
char> char-greaterp 检查如果操作数的值单调递增。
char<= char-not-greaterp 如有左操作数的值大于或等于下一个右操作数的值,如果是则条件为真检查。
char>= char-not-lessp 如有左操作数的值小于或等于其右操作数的值,如果是,则条件为真检查。

示例

创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:

; case-sensitive comparison
(write (char= #a #))
(terpri)
(write (char= #a #a))
(terpri)
(write (char= #a #A))
(terpri)
;case-insensitive comparision
(write (char-equal #a #A))
(terpri)
(write (char-equal #a #))
(terpri)
(write (char-lessp #a # #c))
(terpri)
(write (char-greaterp #a # #c))

当执行以上代码,它返回以下结果:

NIL
T
NIL
T
NIL
T
NIL