和其他程式語言一樣,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互相轉換。
Lewis 是一位年輕的 Lisp 外星人,他正在進行自己的人類字母專案,需要完成一些工作,於是問你能不能幫他寫幾個他會用到的函式。
Lewis 需要一個函式來比較兩個字元,判斷第一個字元是 greater-than、less-than 還是 equal-to 第二個字元。
請寫一個函式compare-chars,它接受兩個字元,並視情況回傳:greater-than、:less-than或:equal-to。
這個函式在比較時應區分大小寫。
Lewis 需要知道字元是「big」(大寫字元)還是「little」(小寫字元),或者兩者皆非時的「no-size」。
請寫一個函式size-of-char,它會依字元的「大小」回傳:big、:small或:no-size:
Lewis 可能需要把「big」字元變成「small」,或把「small」字元變成「big」。
請寫一個函式change-size-of-char,它接受兩個參數:一個字元和想要的大小(:big或:small)。
它應該回傳大小正確的對應字元。
Lewis 不僅需要知道字元的「大小」,還需要知道它的「類型」。
請寫一個函式type-of-char,如果字元是字母字元,就回傳:alpha;如果是數字字元,就回傳:numeric;如果是空白字元,就回傳:space;如果是換行字元,就回傳:newline;其他情況則回傳:unknown。