Recherche…


Paramètres

Liste Lambda (format DESTINATION CONTROL-STRING &REST FORMAT-ARGUMENTS)
DESTINATION la chose à écrire. Cela peut être un flux de sortie, t (raccourci pour *standard-output* ) ou nil (qui crée une chaîne à écrire)
CONTROL-STRING la chaîne de template. Il peut s'agir d'une chaîne primitive ou de directives de commande avec préfixe tilde spécifiant et transformant d'une manière ou d'une autre des arguments supplémentaires.
FORMAT-ARGUMENTS arguments supplémentaires potentiels requis par le CONTROL-STRING .

Remarques

La documentation CLHS pour les directives FORMAT se trouve à la Section 22.3 . Avec SLIME, vous pouvez taper Cc Cd ~ pour rechercher la documentation CLHS d'une directive de format spécifique.

Utilisation de base et directives simples

Les deux premiers arguments à formater sont un flux de sortie et une chaîne de contrôle. L'utilisation de base ne nécessite pas d'arguments supplémentaires. Passer t comme le flux écrit dans *standard-output* .

> (format t "Basic Message")
Basic Message
nil

Cette expression va écrire Basic Message sur la sortie standard et renvoyer la valeur nil .

nil le flux est nil , le flux crée une nouvelle chaîne et la renvoie.

> (format nil "Basic Message")
"Basic Message"

La plupart des directives de chaîne de contrôle nécessitent des arguments supplémentaires. La ~a directive ("esthétique") imprimera tout argument comme par la procédure princ . Ceci imprime le formulaire sans aucun caractère d'échappement (les mots-clés sont imprimés sans les deux-points principaux, les chaînes sans les guillemets qui les entourent, etc.).

> (format nil "A Test: ~a" 42)
"A Test: 42"
> (format nil "Multiples: ~a ~a ~a ~a" 1 (list 2 3) "four five" :six)
"Multiples: 1 (2 3) four five SIX"
> (format nil "A Test: ~a" :test)
"A Test: TEST"
> (format nil "A Test: ~a" "Example")
"A Test: Example"

~a entrée optionnelle droite ou gauche basée sur des entrées supplémentaires.

> (format nil "A Test: ~10a" "Example")
"A Test: Example   "
> (format nil "A Test: ~10@a" "Example")
"A Test:    Example"

La directive ~s est comme ~a , mais elle imprime des caractères d'échappement.

> (format nil "A Test: ~s" 42)
"A Test: 42"
> (format nil "Multiples: ~s ~s ~s ~s" 1 (list 2 3) "four five" :six)
"Multiples: 1 (2 3) \"four five\" :SIX"
> (format nil "A Test: ~s" :test)
"A Test: :TEST"
> (format nil "A Test: ~s" "Example")
"A Test: \"Example\""

Itérer sur une liste

On peut parcourir une liste en utilisant les directives ~{ et ~} .

CL-USER> (format t "~{~a, ~}~%" '(1 2 3 4 5))
1, 2, 3, 4, 5, 

~^ peut être utilisé pour échapper s'il ne reste plus d'éléments.

CL-USER> (format t "~{~a~^, ~}~%" '(1 2 3 4 5))
1, 2, 3, 4, 5

Un argument numérique peut être donné à ~{ pour limiter le nombre d'itérations pouvant être effectuées:

CL-USER> (format t "~3{~a~^, ~}~%" '(1 2 3 4 5))
1, 2, 3, 

~@{ va parcourir les arguments restants au lieu d'une liste:

CL-USER> (format t "~a: ~@{~a~^, ~}~%" :foo 1 2 3 4 5)
FOO: 1, 2, 3, 4, 5

Les sous-listes peuvent être répétées en utilisant ~:{ :

CL-USER> (format t "~:{(~a, ~a) ~}~%" '((1 2) (3 4) (5 6)))
(1, 2) (3, 4) (5, 6) 

Expressions conditionnelles

Les expressions conditionnelles peuvent être effectuées avec ~[ et ~] . Les clauses de l'expression sont séparées en utilisant ~; .

Par défaut, ~[ prend un entier dans la liste des arguments et sélectionne la clause correspondante. Les clauses commencent à zéro.

(format t "~@{~[First clause~;Second clause~;Third clause~;Fourth clause~]~%~}"
        0 1 2 3)
; First clause
; Second clause
; Third clause
; Fourth clause

La dernière clause peut être séparée avec ~:; au lieu de faire la clause sinon.

(format t "~@{~[First clause~;Second clause~;Third clause~:;Too high!~]~%~}"
        0 1 2 3 4 5)
; First clause
; Second clause
; Third clause
; Too high!
; Too high!
; Too high!

Si l'expression conditionnelle commence par ~:[ , elle attendra un booléen généralisé au lieu d'un entier. Il ne peut avoir que deux clauses; le premier est imprimé si le booléen est NIL et le second si c'est vrai.

(format t "~@{~:[False!~;True!~]~%~}"
        t nil 10 "Foo" '())
; True!
; False!
; True!
; True!
; False!

Si l'expression conditionnelle commence par ~@[ , il ne devrait y avoir qu'une seule clause, qui est imprimée si l'entrée, un booléen généralisé, était véridique. Le booléen ne sera pas consommé s'il est véridique.

(format t "~@{~@[~s is truthy!~%~]~}"
        t nil 10 "Foo" '())
; T is truthy!
; 10 is truthy!
; "Foo" is truthy!


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow