Функции вывода
В этом разделе описаны функции Lisp для вывода объектов Lisp — преобразования объектов в их печатное представление.
Некоторые функции печати Emacs при необходимости добавляют в вывод символы экранирования, чтобы его можно было правильно прочитать. Используются символы экранирования ‘"’ и ‘\’; они отличают строки от символов и не позволяют принимать знаки препинания в строках и символах за разделители при чтении. Полное описание см. в разделе Печатное представление и синтаксис чтения. Выбором функции печати можно указать, использовать экранирование или нет.
Если текст предполагается снова прочитать в Lisp, следует выводить его с символами экранирования, чтобы избежать неоднозначности. То же относится к случаям, когда нужно наглядно описать объект Lisp для программиста на Lisp. Однако если вывод предназначен для удобства чтения людьми, обычно лучше печатать без экранирования.
Объекты Lisp могут ссылаться сами на себя. Обычная печать объекта, ссылающегося на себя, потребовала бы бесконечного объёма текста, а такая попытка могла бы привести к бесконечной рекурсии. Emacs обнаруживает такую рекурсию и выводит ‘#level’ вместо рекурсивной печати уже печатаемого объекта. Например, здесь ‘#0’ указывает на рекурсивную ссылку на объект на уровне 0 текущей операции печати:
(setq foo (list nil))
⇒ (nil)
(setcar foo foo)
⇒ (#0)
В приведённых ниже функциях stream обозначает выходной поток. (Описание выходных потоков см. в предыдущем разделе. Также см. external-debugging-output — полезное значение потока для отладки.) Если stream равен nil или не указан, по умолчанию используется значение standard-output.
- Функция: print object &optional stream
-
Функция
print— это удобный способ вывода. Она выводит печатное представление object в stream, добавляя перед object перевод строки и ещё один после него. Используются символы экранирования.printвозвращает object. Например:(progn (print 'The\ cat\ in) (print "the hat") (print " came back")) -| -| The\ cat\ in -| -| "the hat" -| -| " came back" ⇒ " came back"
- Функция: prin1 object &optional stream overrides
-
Эта функция выводит печатное представление object в stream. В отличие от
print, она не выводит разделяющие вывод символы перевода строки, но, как иprint, использует символы экранирования. Она возвращает object.(progn (prin1 'The\ cat\ in) (prin1 "the hat") (prin1 " came back")) -| The\ cat\ in"the hat"" came back" ⇒ " came back"Если overrides не равен
nil, он должен быть либоt(что указываетprin1использовать значения по умолчанию для всех переменных, связанных с печатью), либо списком настроек. Подробности см. в разделе Переопределение переменных вывода.
- Функция: princ object &optional stream
-
Эта функция выводит печатное представление object в stream. Она возвращает object.
Эта функция предназначена для создания вывода, удобного для чтения людьми, а не
read, поэтому она не вставляет символы экранирования и не заключает содержимое строк в двойные кавычки. Она не добавляет пробелы между вызовами.(progn (princ 'The\ cat) (princ " in the \"hat\"")) -| The cat in the "hat" ⇒ " in the \"hat\""
- Функция: terpri &optional stream ensure
-
Эта функция выводит символ перевода строки в stream. Её название означает «завершить печать». Если ensure не равен
nil, символ перевода строки не выводится, если stream уже находится в начале строки. Обратите внимание: в этом случае stream не может быть функцией; если это так, возникает ошибка. Эта функция возвращаетt, если символ перевода строки был выведен.
- Функция: write-char character &optional stream
Эта функция выводит character в stream. Она возвращает character.
- Функция: flush-standard-output
Если вы используете пакетные сценарии на основе Emacs, которые выводят данные в терминал, Emacs будет автоматически отображать вывод при записи символов перевода строки в
standard-output. Эта функция позволяет сбросить буферstandard-output, не отправляя предварительно символ перевода строки, и тем самым отображать незавершённые строки.
- Функция: prin1-to-string object &optional noescape overrides
-
Эта функция возвращает строку, содержащую текст, который
prin1вывела бы для того же аргумента.(prin1-to-string 'foo) ⇒ "foo"(prin1-to-string (mark-marker)) ⇒ "#<marker at 2773 in strings.texi>"Если overrides не равен
nil, он должен быть либоt(что указываетprin1использовать значения по умолчанию для всех переменных, связанных с печатью), либо списком настроек. Подробности см. в разделе Переопределение переменных вывода.Если noescape не равен
nil, использование символов экранирования в выводе отключается. (Этот аргумент поддерживается в Emacs версии 19 и более поздних.)(prin1-to-string "foo") ⇒ "\"foo\""(prin1-to-string "foo" t) ⇒ "foo"Другие способы получить печатное представление объекта Lisp в виде строки см. в описании
formatв разделе Форматирование строк.
- Макрос: with-output-to-string body…
-
Этот макрос выполняет формы body, настроив
standard-outputтак, чтобы вывод направлялся в строку. Затем он возвращает эту строку.Например, если имя текущего буфера — ‘foo’,
(with-output-to-string (princ "The buffer is ") (princ (buffer-name)))
возвращает
"The buffer is foo".
- Функция: pp object &optional stream
Эта функция выводит object в stream, как и
prin1, но делает это более аккуратно. То есть она форматирует объект с отступами и переносами строк, чтобы людям было удобнее его читать.
Если в пакетном режиме вам нужно выполнять двоичный ввод-вывод, например использовать функции из этого раздела для записи произвольных двоичных данных или избежать преобразования символов перевода строки на системах, отличных от POSIX, см. set-binary-mode.
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Output-Functions.html