Ответ 1
Символы для возврата и перевода строки
\r
- символ #\return
в Common Lisp.
\n
- символ #\linefeed
в Common Lisp.
Далее строка "Hello world."
завершается возвратом и переводом строки.
(format t "Hello world.~C~C" #\return #\linefeed)
#\newline
- это то, что платформа использует в качестве линейного деления. На машинах Unix это часто совпадает с #\linefeed
. На других платформах (Windows, Lisp Машины,...) это может быть другим.
Контроль FORMAT
Элемент FORMAT
~%
печатает новую строку (!).
Итак,
(format t "Hello world.~%")
напечатает новую строку, используемую операционной системой. CR или CRLF или LF. В зависимости от платформы это будет один или два символа.
Итак, на машине Windows ваш
(format t "Hello world.~C~%" #\return)
может фактически напечатать: #\return
#\return
#\linefeed
. Это три символа, а не два. Windows использует CRLF для новых строк. Unix использует LF. Старая Mac OS (до Mac OS X) и Lisp Машины использовали CR для строк новой строки.
Запись CRLF
Если вы действительно хотите распечатать CRLF, вы должны сделать это явно. Например:
(defun crlf (&optional (stream *standard-output*))
(write-char #\return stream)
(write-char #\linefeed stream)
(values))
FORMAT
не имеет специального синтаксиса для вывода строк или символов возврата каретки.
Линейные строки в элементе управления FORMAT
Общий Lisp позволяет многострочные строки. Таким образом, мы можем использовать их в качестве элементов управления форматом:
Здесь вы можете видеть, что разрыв строки в строке управления также находится в выводе:
CL-USER 77 > (format t "~%first line
second line~%~%")
first line
second line
NIL
Вот пример, в котором элемент управления [email protected]
FORMAT сохраняет строку, но удаляет пробелы на следующей строке:
CL-USER 78 > (format t "~%first [email protected]
second line~%~%")
first line
second line
NIL