В этом разделе описаны функции 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 в stream, выводя дополнительный перевод строки перед object и еще один после него. Используются символы кавычек. print возвращает object. Например:
(progn (print 'The\ cat\ in)
(print "the hat")
(print " came back"))
-|
-| The\ cat\ in
-|
-| "the hat"
-|
-| " came back"
⇒ " came back"
Эта функция выводит представление для вывода 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 использовать значения по умолчанию для всех переменных, связанных с выводом), либо списком настроек. Подробности см. в Переопределение переменных вывода.
Эта функция выводит представление для вывода object в stream. Она возвращает object.
Эта функция предназначена для создания вывода, который читаем для людей, а не для read, поэтому она не вставляет символы кавычек и не заключает содержимое строк в двойные кавычки. Она не добавляет никакого пробела между вызовами.
(progn
(princ 'The\ cat)
(princ " in the \"hat\""))
-| The cat in the "hat"
⇒ " in the \"hat\""
Эта функция выводит перевод строки в stream. Название означает «завершить вывод». Если ensure не равно nil, перевод строки не выводится, если stream уже находится в начале строки. Обратите внимание, в этом случае stream не может быть функцией, и будет выдан сбой, если это так. Эта функция возвращает t, если перевод строки был выведен.
Эта функция выводит character в stream. Она возвращает character.
Если у вас есть пакетные скрипты на Emacs, которые отправляют вывод в терминал, Emacs автоматически отобразит вывод всякий раз, когда вы пишете символ перевода строки в standard-output. Эта функция позволяет сбросить вывод в standard-output без предварительной отправки символа перевода строки, что позволяет отображать незавершенные строки.
Эта функция возвращает строку, содержащую текст, который 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"
См. format в Форматирование строк для других способов получения представления для вывода объекта Lisp в виде строки.
Этот макрос выполняет формы body с standard-output, настроенным для направления вывода в строку. Затем он возвращает эту строку.
Например, если имя текущего буфера — ‘foo’,
(with-output-to-string (princ "The buffer is ") (princ (buffer-name)))
он возвращает "The buffer is foo".
Эта функция выводит object в stream, подобно prin1, но делает это более красиво. То есть, она отступырует и заполняет объект, чтобы сделать его более читаемым для человека.
Если вам необходимо использовать бинарный ввод/вывод в пакетном режиме, например, использовать функции, описанные в этом разделе, для записи произвольных бинарных данных или избежать преобразования переводов строк на не-POSIX хостах, см. set-binary-mode.