LISP - 转义序列
Lisp - 字符和字符串
Section titled “Lisp - 字符和字符串”在 Common Lisp 中,字符串是字符序列。与 C 或 Python 等语言不同,Lisp 字符串的转义序列非常少。特殊字符通常由函数或 format 控制序列处理,而不是直接嵌入到字符串字面量中。
字符串中的主要转义序列
Section titled “字符串中的主要转义序列”在字符串字面量(由双引号 " 界定)中,只有两个字符需要使用反斜杠(\)进行转义:
\"- 在字符串内部包含一个字面双引号字符。示例:"He said, \"Greetings!\""。\\- 在字符串内部包含一个字面反斜杠字符。示例:"This is a file path: C:\\Users\\..."。
如何处理换行符和制表符
Section titled “如何处理换行符和制表符”尽管某些 Lisp 实现可能支持 \n 或 \t,但处理控制字符的可移植且惯用的方式是通过 format 函数或在源代码中直接写入字面量换行符。
~%在format中:format控制字符串中的~%指令会插入一个换行符。~t在format中:format控制字符串中的~t指令用于处理制表符。- 字面量换行符:你可以在编辑器中的字符串字面量内直接按 Enter 键。生成的字符串将包含换行符。
让我们看看这些概念的实际应用。将以下代码保存为 main.lisp 并运行它。
main.lisp
Section titled “main.lisp”(defun demonstrate-strings () ;; 示例 1:转义双引号 (let ((quote-string "She exclaimed, \"Lisp is powerful!\"")) (format t "Example 1: ~a~%" quote-string))
(terpri) ; 打印一个空行用于分隔
;; 示例 2:转义反斜杠 (let ((path-string "A windows-style path: C:\\Temp\\File")) (format t "Example 2: ~a~%" path-string))
(terpri)
;; 示例 3:使用 FORMAT 处理换行符和制表符 (format t "Example 3:~%") (format t "\t- First item~%\t- Second item~%"))
;; 运行演示(demonstrate-strings)执行此代码将产生以下结果:
Example 1: She exclaimed, "Lisp is powerful!"
Example 2: A windows-style path: C:\Temp\File
Example 3: - First item - Second item专业提示:字符 vs. 字符串
Section titled “专业提示:字符 vs. 字符串”在 Lisp 中,区分字符串和字符很重要:
- 字符 字面量以
#\前缀书写。例如,#\A是字符 ‘A’,#\Space是空格字符。 - 字符串 是字符序列,写在双引号内,如
"Hello"。 - 这种区分对于专门操作字符的函数很重要,例如用于比较的
char=。
(characterp #\a) ; => T(stringp "a") ; => T(string= "a" (string #\a)) ; => T (如果转换,它们可以进行比较)