Spec-Zone.ru › Elisp

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

В этом разделе описаны функции Lisp для вывода объектов Lisp — преобразование объектов в их строковое представление.

Некоторые функции вывода Emacs добавляют символы экранирования в вывод при необходимости, чтобы его можно было корректно прочитать. Использованные символы экранирования — ‘"’ и ‘\’; они различают строки и символы и предотвращают использование символов пунктуации в строках и символах в качестве разделителей при чтении. Подробности см. в разделе Печатное представление.

Если текст нужно будет повторно прочитать в Lisp, то следует использовать вывод с экранированием, чтобы избежать неоднозначности. Точно так же, если целью является четкое описание объекта Lisp для программиста Lisp. Однако, если целью вывода является наглядность для человека, то обычно лучше выводить без экранирования.

Объекты Lisp могут ссылаться на себя. Вывод рекурсивного объекта обычным способом потребовал бы бесконечного количества текста, а попытка может вызвать бесконечную рекурсию. Emacs обнаруживает такую рекурсию и выводит ‘#уровень’ вместо рекурсивного вывода объекта, который уже выводится. Например, ‘#0’ указывает на рекурсивную ссылку на объект на уровне 0 текущей операции вывода:

(setq foo (list nil))
     ⇒ (nil)
(setcar foo foo)
     ⇒ (#0)

В функциях ниже поток обозначает поток вывода. (Описание потоков вывода см. в предыдущем разделе. Также см. external-debugging-output, полезное значение потока для отладки.) Если поток равен nil или опущен, он по умолчанию принимает значение standard-output.

Функция: print объект &опциональный поток

Функция print — удобный способ вывода. Она выводит строковое представление объекта в поток, а также печатает один символ новой строки перед объектом и еще один после него. Используются символы экранирования. print возвращает объект. Например:

(progn (print 'The\ cat\ in)
       (print "the hat")
       (print " came back"))
     -|
     -| The\ cat\ in
     -|
     -| "the hat"
     -|
     -| " came back"
     ⇒ " came back"
Функция: prin1 объект &опциональный поток

Эта функция выводит строковое представление объекта в поток. Она не выводит символы новой строки для разделения вывода, как print, но использует символы экранирования, как и print. Возвращает объект.

(progn (prin1 'The\ cat\ in)
       (prin1 "the hat")
       (prin1 " came back"))
     -| The\ cat\ in"the hat"" came back"
     ⇒ " came back"
Функция: princ объект &опциональный поток

Эта функция выводит строковое представление объекта в поток. Возвращает объект.

Эта функция предназначена для вывода, читаемого человеком, а не read, поэтому она не вставляет символы экранирования и не помещает двойные кавычки вокруг содержимого строк. Она не добавляет пробелы между вызовами.

(progn
  (princ 'The\ cat)
  (princ " in the \"hat\""))
     -| The cat in the "hat"
     ⇒ " in the \"hat\""
Функция: terpri &опциональный поток гарантировать

Эта функция выводит символ новой строки в поток. Название означает «завершить вывод». Если гарантировать не nil, символ новой строки не печатается, если поток уже находится в начале строки. В этом случае поток не может быть функцией, и при попытке такого использования возникает ошибка. Функция возвращает t, если символ новой строки выведен.

Функция: write-char символ &опциональный поток

Эта функция выводит символ в поток. Возвращает символ.

Функция: prin1-to-string объект &опциональный безэкранирования

Эта функция возвращает строку, содержащую текст, который prin1 напечатал бы для того же аргумента.

(prin1-to-string 'foo)
     ⇒ "foo"
(prin1-to-string (mark-marker))
     ⇒ "#<marker at 2773 in strings.texi>"

Если безэкранирования не nil, это подавляет использование символов экранирования в выводе. (Этот аргумент поддерживается в версиях Emacs 19 и более поздних.)

(prin1-to-string "foo")
     ⇒ "\"foo\""
(prin1-to-string "foo" t)
     ⇒ "foo"

См. format, в Форматирование строк, для других способов получения строкового представления объекта Lisp.

Макрос: 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 объект &опциональный поток

Эта функция выводит объект в поток, точно так же, как prin1, но более наглядно. То есть, она будет добавлять отступы и форматировать объект, чтобы сделать его более читаемым для человека.

Если вам нужно использовать двоичный ввод-вывод в пакетном режиме, например, использовать функции, описанные в этом разделе, для записи произвольных двоичных данных или избежать преобразования символов новой строки на не-POSIX-хостах, см. set-binary-mode.

Copyright © 1990-1996, 1998-2022 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