caratteri per ritorno e avanzamento riga
\r
è il personaggio #\return
in Common Lisp.
\n
è il carattere #\linefeed
in Common Lisp.
Quanto segue termina la stringa "Hello world."
con ritorno e avanzamento riga.
(format t "Hello world.~C~C" #\return #\linefeed)
#\newline
è qualunque sia la piattaforma utilizzata come una divisione di linea. Su macchine Unix questo è spesso lo stesso di #\linefeed
. Su altre piattaforme (Windows, Lisp Machines, ...) questo potrebbe essere diverso.
controllo del formato
Il controllo FORMAT
~%
stampe un ritorno a capo (!).
Così
(format t "Hello world.~%")
stamperà il ritorno a capo che utilizza il sistema operativo. CR o CRLF o LF. A seconda della piattaforma questo sarà uno o due caratteri.
Quindi, su una macchina Windows tua
(format t "Hello world.~C~%" #\return)
potrebbe effettivamente stampa: #\return
#\return
#\linefeed
. Che è di TRE caratteri e non due. Windows utilizza CRLF per i newline. Unix usa LF. Il vecchio Mac OS (precedente a Mac OS X) e le macchine Lisp utilizzavano CR per i newline.
scrittura CRLF
Se davvero si vuole stampare CRLF, è necessario farlo in modo esplicito.Ad esempio con:
(defun crlf (&optional (stream *standard-output*))
(write-char #\return stream)
(write-char #\linefeed stream)
(values))
FORMAT
non ha sintassi speciale per l'uscita di caratteri di avanzamento riga o ritorno a capo.
Linebreaks in controllo del formato
Common Lisp permette stringhe multilinea. Così li possiamo usare come controlli di formato:
Qui si può vedere che l'interruzione di riga nella stringa di controllo è inoltre in uscita:
CL-USER 77 > (format t "~%first line
second line~%~%")
first line
second line
NIL
Ecco un esempio in cui il controllo [email protected]
FORMAT mantiene il linebreak , ma rimuove gli spazi vuoti nella riga successiva:
CL-USER 78 > (format t "~%first [email protected]
second line~%~%")
first line
second line
NIL
In SBCL 1.0.22, CLISP 2,47 e Clozure CL 1.3 su Windows: (Aref (formato zero "~%") 0) restituisce # \ Newline. –
@Frank Shearar: e cosa produce (lunghezza (formato nil "~%"))? E cosa produce quando lo scrivi in un file? Quanto è lungo il file? –
1, 1 e 1 per la lunghezza. Con (con-file-aperto (s #p "c: \\ foo.txt": direction: output: if-exists: supersede) (write-string (formato nil "~%") s)), SBCL e CCL sputa un file di 1 byte contenente \ #Newline. Clisp sputò un file di 1 byte contenente un # \ Return! –