Spec-Zone.ru › Elisp

Функции вывода

В этом разделе описаны функции 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API