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

В этом разделе описываются функции и переменные Lisp, относящиеся к чтению.

В приведенных ниже функциях stream обозначает поток ввода (см. предыдущий раздел). Если stream равен nil или опущен, по умолчанию используется значение standard-input.

Ошибка end-of-file сигнализируется, если чтение обнаруживает незавершенный список, вектор или строку.

Функция: read &optional stream

Эта функция считывает одно текстовое выражение Lisp из stream, возвращая его в виде объекта Lisp. Это базовая функция ввода Lisp.

Функция: read-from-string string &optional start end

Эта функция считывает первое текстовое выражение Lisp из текста в string. Она возвращает ячейку cons, чей CAR — это это выражение, а чей CDR — это целое число, указывающее позицию следующего оставшегося символа в строке (то есть первого не прочитанного).

Если указан start, то чтение начинается с индекса start в строке (где первый символ находится по индексу 0). Если вы указываете end, то чтение принудительно останавливается непосредственно перед этим индексом, как если бы остальная часть строки там не было.

Например:

(read-from-string "(setq x 55) (setq y 5)")
     ⇒ ((setq x 55) . 11)
(read-from-string ""A short string"")
     ⇒ ("A short string" . 16)

;; Чтение, начиная с первого символа.
(read-from-string "(list 112)" 0)
     ⇒ ((list 112) . 10)
;; Чтение, начиная со второго символа.
(read-from-string "(list 112)" 1)
     ⇒ (list . 5)
;; Чтение, начиная с седьмого символа,
;;   и останавливаясь на девятом.
(read-from-string "(list 112)" 6 8)
     ⇒ (11 . 8)
Функция: read-positioning-symbols &optional stream

Эта функция считывает одно текстовое выражение из stream, как это делает read, но дополнительно позиционирует считанные символы по тем позициям в stream, где они встречались. Только символ nil не позиционируется, это сделано для повышения эффективности. См. Символы с позицией. Эта функция используется компилятором байт-кода.

Переменная: standard-input

Эта переменная содержит поток ввода по умолчанию — поток, который read использует, когда аргумент stream равен nil. По умолчанию установлено значение t, что означает использование minibuffer.

Переменная: read-circle

Если она не равна nil, эта переменная включает чтение циклических и общих структур. См. Синтаксис чтения для циклических объектов. По умолчанию установлено значение t.

При чтении или записи из стандартных потоков ввода/вывода процесса Emacs в пакетном режиме иногда необходимо убедиться, что любые произвольные бинарные данные будут прочитаны/записаны дословно и/или что не будет выполнено преобразование переводов строк в пары CR-LF. Эта проблема не возникает на хостах POSIX, только на MS-Windows и MS-DOS. Следующая функция позволяет контролировать режим ввода-вывода любого стандартного потока процесса Emacs.

Функция: set-binary-mode stream mode

Переключает stream в бинарный или текстовый режим ввода-вывода. Если mode не равен nil, переключается в бинарный режим, в противном случае — в текстовый. Значение stream может быть одним из stdin, stdout или stderr. Эта функция сбрасывает любые ожидающие данные вывода для stream в качестве побочного эффекта и возвращает предыдущее значение режима ввода-вывода для stream. На хостах POSIX она всегда возвращает не nil и ничего не делает, кроме как сбрасывает ожидающий вывод.

Функция: readablep object

Этот предикат определяет, имеет ли object читаемый синтаксис, то есть может ли он быть записан, а затем прочитан обратно с помощью парсера Emacs Lisp. Если это невозможно, эта функция возвращает nil; если возможно, эта функция возвращает печатное представление (prin1, см. Функции вывода) object.