Basically, I’d like to do the following, only using Common Lisp instead of Python:
print("Hello world.\r\n")
I can do this, but it only outputs the #\newline character and skips #\return:
(format t "Hello world.~%")
I believe I could accomplish this using an outside argument, like this:
(format t "Hello world.~C~%" #\return)
But is seems awkward to me. Surely I can somehow embed #\return into the very format string, like I can #\newline?
Characters for return and linefeed
\ris the character#\returnin Common Lisp.\nis the character#\linefeedin Common Lisp.The following ends the string
"Hello world."with return and linefeed.#\newlineis whatever the platform uses as a line division. On Unix machines this is often the same as#\linefeed. On other platforms (Windows, Lisp Machines, …) this could be different.FORMAT control
The
FORMATcontrol~%prints a newline (!).So
will print the newline that the operating system uses. CR or CRLF or LF. Depending on the platform this will be one or two characters.
So, on a Windows machine your
might actually print:
#\return#\return#\linefeed. Which is THREE characters and not two. Windows uses CRLF for newlines. Unix uses LF. Old Mac OS (prior to Mac OS X) and Lisp Machines used CR for newlines.Writing CRLF
If you really want to print CRLF, you have to do it explicitly. For example with:
FORMATdoes not have special syntax for output of linefeed or carriage return characters.Linebreaks in FORMAT control
Common Lisp allows multi-line strings. Thus we can use them as format controls:
Here you can see that the line break in the control string is also in the output:
Here is an example where the
~@FORMAT control keeps the linebreak, but removes the whitespace on the next line: