2.4.3.1 Базовый синтаксис символов

Поскольку символы на самом деле являются целыми числами, печатное представление символа — это десятичное число. Это также возможный синтаксис чтения для символа, но запись символов таким образом в программах Lisp не является ясным программированием. Вы всегда должны использовать специальные форматы синтаксиса чтения, которые Emacs Lisp предоставляет для символов. Эти форматы синтаксиса начинаются с вопросительного знака.

Обычный синтаксис чтения для буквенно-цифровых символов — это вопросительный знак, за которым следует символ; таким образом, ‘?A’ для символа A, ‘?B’ для символа B и ‘?a’ для символа a.

Например:

?Q ⇒ 81     ?q ⇒ 113

Вы можете использовать тот же синтаксис для знаков препинания. Однако, если знак препинания имеет особое синтаксическое значение в Lisp, вы должны заключить его в кавычки с помощью ‘\’. Например, ‘?\(’ — это способ записи символа открывающей скобки. Точно так же, если символ — ‘\’, вы должны использовать вторую ‘\’ для его экранирования: ‘?\\’.

Вы можете представить символы control-g, backspace, tab, newline, vertical tab, formfeed, space, return, del и escape как ‘?\a’, ‘?\b’, ‘?\t’, ‘?\n’, ‘?\v’, ‘?\f’, ‘?\s’, ‘?\r’, ‘?\d’, и ‘?\e’, соответственно. (‘?\s’ с дефисом имеет другое значение — он применяет модификатор Super к следующему символу.) Таким образом,

?\a ⇒ 7                 ; control-g, C-g
?\b ⇒ 8                 ; backspace, BS, C-h
?\t ⇒ 9                 ; tab, TAB, C-i
?\n ⇒ 10                ; newline, C-j
?\v ⇒ 11                ; vertical tab, C-k
?\f ⇒ 12                ; formfeed character, C-l
?\r ⇒ 13                ; carriage return, RET, C-m
?\e ⇒ 27                ; escape character, ESC, C-[
?\s ⇒ 32                ; space character, SPC
?\\ ⇒ 92                ; backslash character, \
?\d ⇒ 127               ; delete character, DEL

Эти последовательности, начинающиеся с обратного слеша, также известны как последовательности экранирования, потому что обратный слеш играет роль символа экранирования; это не имеет отношения к символу ESC. ‘\s’ предназначена для использования в константах символов; в константах строк просто напишите пробел.

Разрешено и безвредно ставить обратный слеш перед любым символом без особого значения экранирования; таким образом, ‘?\+’ эквивалентно ‘?+’. Нет никакой причины добавлять обратный слеш перед большинством символов. Однако вы должны добавлять обратный слеш перед любым из символов ‘()[]\;"’, и вы следует добавлять обратный слеш перед любым из символов ‘|'`#.,’, чтобы избежать путаницы с командами Emacs для редактирования кода Lisp. Вы также должны добавлять обратный слеш перед символами Unicode, которые напоминают ранее упомянутые символы ASCII, чтобы избежать запутывания людей, читающих ваш код. Emacs выделит некоторые неэкранированные часто путаемые символы, такие как ‘‘’, чтобы поощрить это. Вы также можете добавлять обратный слеш перед символами пробелов, такими как пробел и табуляция. Однако чище использовать одну из легко читаемых последовательностей экранирования, таких как ‘\t’ или ‘\s’, вместо фактического символа пробела, такого как табуляция или пробел. (Если вы пишете обратный слеш, за которым следует пробел, вы должны написать дополнительный пробел после константы символа, чтобы отделить его от следующего текста.)