Buscar..


Parámetros

Lambda-List (format DESTINATION CONTROL-STRING &REST FORMAT-ARGUMENTS)
DESTINATION la cosa para escribir. Puede ser una secuencia de salida, t (abreviatura para *standard-output* ), o nil (que crea una cadena para escribir)
CONTROL-STRING la cadena de la plantilla. Puede ser una cadena primitiva o puede contener directivas de comandos con prefijo de tilde que especifiquen y de alguna manera transformen argumentos adicionales.
FORMAT-ARGUMENTS posibles argumentos adicionales requeridos por el CONTROL-STRING dado.

Observaciones

La documentación de CLHS para las directivas FORMAT se puede encontrar en la Sección 22.3 . Con SLIME, puede escribir Cc Cd ~ para buscar la documentación de CLHS para una directiva de formato específica.

Uso básico y directivas simples

Los primeros dos argumentos para dar formato son una secuencia de salida y una cadena de control. El uso básico no requiere argumentos adicionales. Al pasar t como la secuencia se escribe en *standard-output* .

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

Esa expresión escribirá el Basic Message en la salida estándar y devolverá nil .

Al pasar nil como la secuencia crea una nueva cadena y la devuelve.

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

La mayoría de las directivas de cadenas de control requieren argumentos adicionales. La directiva ~a ("estética") imprimirá cualquier argumento como por el procedimiento de princ . Esto imprime el formulario sin caracteres de escape (las palabras clave se imprimen sin los dos puntos iniciales, las cadenas sin las comillas circundantes, 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 opcionalmente derecha o izquierda de pads basada en entradas adicionales.

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

El ~s directiva es como ~a , pero imprime caracteres de escape.

> (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\""

Iterando sobre una lista

Uno puede iterar sobre una lista usando las directivas ~{ y ~} .

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

~^ puede usarse para escapar si no quedan más elementos.

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

Se puede dar un argumento numérico a ~{ para limitar cuántas iteraciones se pueden hacer:

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

~@{ iterará sobre los argumentos restantes, en lugar de una lista:

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

Las sublistas pueden ser iteradas usando ~:{ :

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

Expresiones condicionales

Las expresiones condicionales se pueden hacer con ~[ y ~] . Las cláusulas de la expresión se separan usando ~; .

De forma predeterminada, ~[ toma un número entero de la lista de argumentos y selecciona la cláusula correspondiente. Las cláusulas comienzan en cero.

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

La última cláusula se puede separar con ~:; en su lugar para que sea la cláusula else.

(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 la expresión condicional comienza con ~:[ , esperará un booleano generalizado en lugar de un entero. Solo puede tener dos cláusulas; el primero se imprime si el valor booleano es NIL , y la segunda cláusula si es veraz.

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

Si la expresión condicional comienza con ~@[ , solo debería haber una cláusula, que se imprime si la entrada, un booleano generalizado, era veraz. El booleano no se consumirá si es veraz.

(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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow