Fondamentalement, j'aimerais faire ce qui suit, en utilisant uniquement Common LISP au lieu de Python:
print("Hello world.\r\n")
Je peux le faire, mais il ne sort que le #\newline
caractère et saute #\return
:
(format t "Hello world.~%")
Je crois que je pourrais accomplir cela en utilisant un argument extérieur, comme ceci:
(format t "Hello world.~C~%" #\return)
Mais cela me semble gênant. Je peux sûrement en quelque sorte intégrer #\return
dans la chaîne même de format, comme je peux #\newline
?
Caractères pour le retour et le saut de ligne
\r
est le caractère #\return
dans LISP commun.
\n
est le caractère #\linefeed
dans LISP commun.
Ce qui suit termine la chaîne "Hello world."
avec retour et saut de ligne.
(format t "Hello world.~C~C" #\return #\linefeed)
#\newline
est tout ce que la plate-forme utilise comme division de ligne. Sur les machines Unix, c'est souvent la même chose que #\linefeed
. Sur d'autres plateformes (Windows, LISP Machines, ...) cela pourrait être différent.
contrôle FORMAT
Le contrôle FORMAT
~%
imprime une nouvelle ligne (!).
Alors
(format t "Hello world.~%")
imprimera la nouvelle ligne utilisée par le système d'exploitation. CR ou CRLF ou LF. Selon la plateforme, ce sera un ou deux caractères.
Ainsi, sur une machine Windows, votre
(format t "Hello world.~C~%" #\return)
pourrait en fait imprimer: #\return
#\return
#\linefeed
. Ce qui fait TROIS caractères et non deux. Windows utilise CRLF pour les retours à la ligne. Unix utilise LF. Les anciens Mac OS (avant Mac OS X) et les machines LISP utilisaient CR pour les nouvelles lignes.
Écriture CRLF
Si vous voulez vraiment imprimer CRLF, vous devez le faire explicitement. Par exemple avec:
(defun crlf (&optional (stream *standard-output*))
(write-char #\return stream)
(write-char #\linefeed stream)
(values))
FORMAT
n'a pas de syntaxe spéciale pour la sortie des sauts de ligne ou des caractères de retour chariot.
sauts de ligne dans le contrôle FORMAT
LISP commun autorise les chaînes multi-lignes. Ainsi, nous pouvons les utiliser comme contrôles de format:
Ici, vous pouvez voir que le saut de ligne dans la chaîne de contrôle se trouve également dans la sortie:
CL-USER 77 > (format t "~%first line
second line~%~%")
first line
second line
NIL
Voici un exemple où le ~@
Le contrôle FORMAT conserve le saut de ligne, mais supprime les espaces sur la ligne suivante:
CL-USER 78 > (format t "~%first line~@
second line~%~%")
first line
second line
NIL
Premièrement, dans Common LISP, la plupart des caractères, y compris return/newline, peuvent être insérés directement dans la chaîne. Le seul caractère à échapper est le délimiteur de chaîne.
Il existe également une bibliothèque cl-interpol qui fournit une macro de lecture pour construire des chaînes avec une syntaxe plus complexe, y compris des caractères d'échappement spéciaux.