4.9 Lisp 中的大小写转换

大小写转换函数用于更改单个字符或字符串内容的大小写形式。这些函数通常仅转换字母字符(即从 ‘A’ 到 ‘Z’、从 ‘a’ 到 ‘z’ 的字母,以及非-ASCII 字母);其他字符保持不变。你可以通过指定一个大小写转换表来自定义大小写转换的映射规则(see 大小写转换表)。

这些函数不会修改作为参数传入的字符串本身。

以下示例使用字符 ‘X’ 和 ‘x’,它们的 ASCII 码分别为 88 和 120。

Function: downcase string-or-char

该函数将 string-or-char(可以是单个字符或字符串)转换为小写形式。

string-or-char 是字符串时,函数返回一个新字符串,其中参数里所有大写字母均被转换为小写;当 string-or-char 是单个字符时,函数返回对应的小写字符(以整数形式表示);若原字符已是小写,或并非字母,则返回值与原字符相同。

(downcase "The cat in the hat")
     ⇒ "the cat in the hat"

(downcase ?X)
     ⇒ 120
Function: upcase string-or-char

该函数将 string-or-char(可以是单个字符或字符串)转换为大写形式。

string-or-char 是字符串时,函数返回一个新字符串,其中参数里所有小写字母均被转换为大写;当 string-or-char 是单个字符时,函数返回对应的大写字符(以整数形式表示);若原字符已是大写,或并非字母,则返回值与原字符相同。

(upcase "The cat in the hat")
     ⇒ "THE CAT IN THE HAT"

(upcase ?x)
     ⇒ 88
Function: capitalize string-or-char

该函数对字符串或字符进行首字母大写格式化。如果 string-or-char 是字符串,函数会返回一个新字符串,其内容是 string-or-char原字符串 的副本,且其中每个单词都被首字母大写。这意味着:每个单词的第一个字符转为大写,其余字符均转为小写。

单词的定义是:在当前语法表中被归类为单词组成符语法类的连续字符序列(see Table of Syntax Classes);如果 case-symbols-as-words 非-nil,那么被归类为符号组成符语法类的字符也会被视为单词组成符。

string-or-char 是单个字符时,该函数的作用与 upcase 完全相同。

(capitalize "The cat in the hat")
     ⇒ "The Cat In The Hat"

(capitalize "THE 77TH-HATTED CAT")
     ⇒ "The 77th-Hatted Cat"

(capitalize ?x)
     ⇒ 88
Function: upcase-initials string-or-char

如果 string-or-char 是字符串,此函数会将 string-or-char 中每个单词的首字母大写,不修改首字母以外的任何字母。它返回一个新字符串,内容是 string-or-char 的副本,其中每个单词的首字母被转换为大写。

此函数对 “单词” 的定义与上文 capitalize 中描述的一致,并且 case-symbols-as-words 对单词组成字符的作用也相同。

upcase-initials 的参数是一个字符时,其效果与 upcase 相同。

(upcase-initials "The CAT in the hAt")
     ⇒ "The CAT In The HAt"

注意:大小写转换并非码点的一一映射,结果的长度可能与参数长度不同。此外,由于传入字符会强制返回类型为字符,函数无法执行正确的替换,因此结果可能与处理单字符字符串时不同。例如:

(upcase "fi")  ; note: single character, ligature "fi"
     ⇒ "FI"
(upcase ?fi)
     ⇒ 64257  ; i.e. ?fi

为避免这种情况,在将字符传入任一大小写转换函数之前,必须先使用 string 函数将其转换为字符串。当然,不能对结果的长度做任何假设。

其他字符也可能具有特殊的大小写转换规则。这些字符都拥有由 Unicode 标准定义的非-nil 字符属性 special-uppercasespecial-lowercasespecial-titlecase(see Character Properties)。这些属性定义的特殊大小写转换规则会覆盖当前的大小写转换表(see 大小写转换表)。

有关字符串比较的函数,see 字符与字符串的比较;其中部分函数会忽略大小写差异,或可选择忽略大小写差异。


emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© 2025 Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike