L'équivalent de R de Common Lisp dans la fonction de format?
Fondamentalement, je voudrais faire ce qui suit, en utilisant seulement Common Lisp au lieu de Python:
print("Hello world.rn")
Je peux le faire, mais il ne renvoie la #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 ça me semble maladroit. Je peux sûrement intégrer #return
dans la chaîne de format même, comme je peux #newline
?
2 réponses
Les Caractères de retour et de retour à la ligne
\r
c'est le caractère #\return
en Common Lisp.
\n
c'est le caractère #\linefeed
en Common Lisp.
Ce qui suit termine la chaîne "Hello world."
avec return et linefeed.
(format t "Hello world.~C~C" #\return #\linefeed)
#\newline
est ce que la plate-forme utilise comme une division de ligne. Sur les machines Unix, c'est souvent la même chose que #\linefeed
. Sur d'autres plates-formes (Windows, Machines Lisp,...) cela pourrait être différent.
FORMAT contrôle de la
Le contrôle FORMAT
~%
affiche une nouvelle ligne (!).
Donc
(format t "Hello world.~%")
Affiche la nouvelle ligne utilisée par le système d'exploitation. CR ou CRLF ou LF. Selon la plate-forme, ce sera un ou deux caractères.
Donc, sur une machine Windows votre
(format t "Hello world.~C~%" #\return)
Pourrait en fait impression: #\return
#\return
#\linefeed
. Ce qui est trois caractères et non deux. Windows utilise CRLF pour les retours à la ligne. Unix utilise LF. Ancien Mac OS (avant Mac OS X) et Lisp machines utilisé CR pour les retours à la ligne.
Écrire 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 caractères de retour de ligne ou de retour chariot.
Sauts de ligne dans le contrôle de FORMAT
Common Lisp permet des 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 est également dans le sortie:
CL-USER 77 > (format t "~%first line
second line~%~%")
first line
second line
NIL
Voici un exemple où le contrôle de 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
Tout d'abord, 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 nécessitant un échappement 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 échappements de caractères spéciaux.