В основном я хотел бы сделать следующий, только использующий язык Common LISP вместо Python:
print("Hello world.\r\n")
Я могу сделать это, но это только производит #\newline
символ и пропуски #\return
:
(format t "Hello world.~%")
Я полагаю, что мог выполнить это использование внешнего аргумента, как это:
(format t "Hello world.~C~%" #\return)
Но, кажется неловким мне. Конечно, я могу так или иначе встроить #\return
в очень строку формата как я могу #\newline
?
Символы для возврата и перевода строки
\r
- это символ #\return
в Common Lisp.
\n
- это символ #\linefeed
в Common Lisp.
Ниже приведено завершение строки "Hello world."
с возвратом и переводом строки.
(format t "Hello world.~C~C" #\return #\linefeed)
#\newline
- это то, что платформа использует в качестве разделения строки. На машинах Unix это часто то же самое, что #\linefeed
. На других платформах (Windows, Lisp Machines, ...) это может быть по-другому.
Элемент управления FORMAT
Элемент управления FORMAT
~%
печатает новую строку (!).
So
(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 Machines использовали CR для новых строк.
Написание CRLF
Если вы действительно хотите напечатать CRLF, вы должны сделать это явно. Например, с:
(defun crlf (&optional (stream *standard-output*))
(write-char #\return stream)
(write-char #\linefeed stream)
(values))
FORMAT
не имеет специального синтаксиса для вывода символов перевода строки или возврата каретки.
Разрывы строк в элементах управления FORMAT
Common Lisp позволяет использовать многострочные строки. Таким образом, мы можем использовать их в качестве элементов управления форматом:
Здесь видно, что перевод строки в управляющей строке также присутствует в выводе:
CL-USER 77 > (format t "~%first line
second line~%~%")
first line
second line
NIL
Вот пример, где элемент управления ~@
FORMAT сохраняет перевод строки, но удаляет пробел на следующей строке:
CL-USER 78 > (format t "~%first line~@
second line~%~%")
first line
second line
NIL
Во-первых, в Common Lisp большинство символов, включая return/newline, могут быть вставлены непосредственно в строку. Единственный символ, требующий экранирования, - это разделитель строк.
Существует также библиотека cl-interpol, которая предоставляет макрос чтения для построения строк с более сложным синтаксисом, включая экранирование специальных символов.