Formato (Lisp común)

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

Formato es una función en Common Lisp que puede producir texto formateado usando una cadena de formato similar a la cadena de formato printf. Proporciona más funcionalidad que printf, lo que permite al usuario generar números en varios formatos (incluidos, por ejemplo: hexadecimal, binario, octal, números romanos e inglés), aplicar ciertos especificadores de formato solo bajo ciertas condiciones. , iterar sobre estructuras de datos, generar datos tabularmente e incluso recurrir, llamando a format internamente para manejar estructuras de datos que incluyen sus propias cadenas de formato preferidas. Esto se origina funcionalmente en Lisp Machine Lisp del MIT, donde se basó en Multics ioa_.

Especificación

La función format está especificada por la sintaxis

formato destino controlString > > formatoArgumentos

Las directivas de la cadena de control se interpolan utilizando los argumentos de formato, y la secuencia de caracteres así construida está escrita al destino.

Destino

El destino puede ser una secuencia, una cadena dinámica, T o la constante NIL; el último de los cuales presenta un caso especial en el sentido de que crea, formatea y devuelve un nuevo objeto de cadena, mientras que T se refiere a la salida estándar, que suele ser equivalente a la consola. Los flujos en Common Lisp comprenden, entre otros, salidas de cadenas y flujos de archivos; por lo tanto, al ser capaz de escribir en tal variedad de destinos, esta función unifica capacidades distribuidas entre distintos comandos en algunos otros lenguajes de programación, como printf de C para salida de consola, sprintf para formatear cadenas y fprintf para escribir archivos.

La multitud de tipos de destino se ejemplifica a continuación:

;; Imprime "1 + 2 = 3" a la salida estándar y devuelve ``NIL'.()formato T "1 + 2 = ~d" 3);; Crea y devuelve una nueva cadena que contiene "1 + 2 = 3".()formato NIL "1 + 2 = ~d" 3);; Crea y devuelve una nueva cadena que contiene "1 + 2 = 3".()con salida a la cadena ()Producto) ()formato Producto "1 + 2 = ~d" 3);; escribe al archivo "outputFile.txt" la cadena "1 + 2 = 3".()con-open-file ()Producto "outputFile.txt" :direction :output Si no existe :crear :si-existe :append) ()formato Producto "1 + 2 = ~d" 3);; Apende a la cadena dinámica la cadena "1 + 2 = 3".()Deja (()de producción ()make-array 0 :element-type 'character :Ajustable T :Punto de relleno 0)) ()Declara ()Tipo cuerda de producción) ()formato de producción "1 + 2 = ~d" 3) ()el cuerda de producción)

Cadena de control y formato de argumentos

La cadena de control puede contener caracteres literales, así como el metacarácter ~ (tilde), que delimita las directivas de formato. Mientras que los literales en la entrada se repiten palabra por palabra, las directivas producen una salida especial, que a menudo consume uno o más argumentos de formato.

Directivas

Una directiva de formato, introducida por un ~, va seguida de cero o más parámetros de prefijo, cero o más modificadores y el tipo de directiva. Por lo tanto, una definición directiva debe ajustarse al patrón

~prefijoParameters[ ]modificadores]Directiva Tipo

El tipo de directiva siempre se especifica mediante un solo carácter, sin distinguir entre mayúsculas y minúsculas en el caso de letras. Los datos que una directiva de formato debe procesar, si son necesarios, se denominan argumento de formato y pueden ser cero o más objetos de cualquier tipo compatibles. Si se aceptan dichos datos y en qué cantidad depende de la directiva y de los posibles modificadores que se le apliquen. El tipo de directiva ~%, por ejemplo, se abstiene del consumo de cualquier argumento de formato, mientras que ~d espera que se imprima exactamente un número entero, y ~@{ , una directiva influenciada por el modificador de signo, procesa todos los argumentos restantes.

La siguiente directiva, ~b, espera un objeto numérico de los argumentos de formato y escribe su equivalente binario (base 2) en la salida estándar.

()formato T "B" 5)

Cuando las configuraciones son permisivas, se pueden especificar parámetros de prefijo.

Parámetros de prefijo

Los parámetros de prefijo permiten una inyección de información adicional en una directiva para operar, similar a la operación de parámetros cuando se proporcionan a una función. Los parámetros de prefijo son siempre opcionales y, si se proporcionan, deben ubicarse entre el ~ de introducción y los modificadores o, si no hay ninguno presente, el tipo de directiva. Los valores están separados por comas, pero no toleran espacios en blanco a ambos lados. El número y tipo de estos parámetros depende de la directiva y de la influencia de posibles modificadores.

Se pueden utilizar dos caracteres particulares como valores de parámetros de prefijo con interpretación distintiva: v o V actúa como marcador de posición para un número entero o carácter de los argumentos de formato que se consumido y colocado en su lugar. El segundo carácter especial, #, se sustituye por el recuento de argumentos de formato respetando su consumo. Tanto v como # habilitan el comportamiento definido por el contenido dinámico inyectado en la lista de parámetros de prefijo.

El valor del parámetro v introduce una funcionalidad equivalente a una variable en el contexto de la programación general. Dado este escenario simple, para rellenar a la izquierda una representación binaria del número entero 5 hasta al menos ocho dígitos con ceros, la solución literal es la siguiente:

()formato T "~8,'0b" 5)

Sin embargo, el primer parámetro de prefijo que controla el ancho de salida puede definirse en términos del carácter v, delegando la especificación del valor del parámetro al siguiente argumento de formato, en nuestro caso 8.

()formato T "v,'0b" 8 5)

Las soluciones de este tipo son particularmente beneficiosas si partes de la lista de parámetros de prefijo se describen mediante variables o argumentos de función en lugar de literales, como es el caso en el siguiente código:

()Deja (()Número de dígitos 8) ()Declara ()Tipo ()entero 0 *) Número de dígitos) ()formato T "v,'0b" Número de dígitos 5)

Aún más apropiado en aquellas situaciones que involucran entrada externa, se puede pasar un argumento de función a la directiva de formato:

()defun print-as-hexadecimal ()número a formato Número de dígitos) "Imprime el NUMBER-TO-FORMAT en el sistema hexadecimal (radix 16), con ceros a al menos NUMBER-OF-DIGITS". ()Declara ()Tipo Número número a formato) ()Declara ()Tipo ()entero 0 *) Número de dígitos) ()formato T "V, '0x" Número de dígitos número a formato)()print-as-hexadecimal 12 2)

# como parámetro de prefijo cuenta los argumentos de formato que aún no han sido procesados por las directivas anteriores, y lo hace sin consumir nada de esta lista. La utilidad de un valor insertado dinámicamente está preponderantemente restringida a casos de uso relacionados con el procesamiento condicional. Como el argumento número sólo puede ser un número entero mayor o igual a cero, su significado coincide con el de un índice en las cláusulas de una directiva ~[ condicional.

La interacción del valor del parámetro de prefijo especial # con la directiva de selección condicional ~[ se ilustra en el siguiente ejemplo. La condición establece cuatro cláusulas, accesibles a través de los índices 0, 1, 2 y 3 respectivamente. El número de argumentos de formato se emplea como medio para la recuperación del índice de cláusulas; para hacerlo, insertamos # en la directiva condicional que permite que el índice sea un parámetro de prefijo. # calcula el recuento de argumentos de formato y sugiere este número como índice de selección. Los argumentos, no consumidos por este acto, están disponibles y procesados por las directivas de la cláusula seleccionada.

;; Impresos "ninguno seleccionado".()formato T "~#[none selected~~;one selected: ~a~;two selected: ~a and ~a~:;more selected: ~@{~a~^, ~}~); Imprimir "uno seleccionado: BUNNY".()formato T "~#[none selected~~;one selected: ~a~;two selected: ~a and ~a~:;more selected: ~@{~a~^, ~}~ Conejo); Imprimir "dos seleccionados: BUNNY y PIGEON".()formato T "~#[none selected~~;one selected: ~a~;two selected: ~a and ~a~:;more selected: ~@{~a~^, ~}~ Conejo 'pigeon);; Impresos "más seleccionados: BUNNY, PIGEON, MOUSE".()formato T "~#[none selected~~;one selected: ~a~;two selected: ~a and ~a~:;more selected: ~@{~a~^, ~}~ Conejo 'pigeon 'mouse')

Modificadores

Los modificadores actúan en calidad de banderas que intentan influir en el comportamiento de una directiva. La admisión, la magnitud de la modificación del comportamiento y el efecto, al igual que con los parámetros de prefijo, dependen de la directiva. En algunos casos graves, la sintaxis de una directiva puede variar hasta el punto de invalidar ciertos parámetros de prefijo; este poder distingue especialmente a los modificadores de la mayoría de los parámetros. Los dos caracteres modificadores válidos son @ (arroba) y : (dos puntos), posiblemente en combinación como :@ o . @:.

El siguiente ejemplo ilustra un caso bastante leve de influencia ejercida sobre una directiva por el modificador @: simplemente garantiza que la representación binaria de un número formateado siempre esté precedida por la firmar:

()formato T "~@b" 5)

Directrices de formato

A continuación se incluye una enumeración de las directivas de formato, incluida su sintaxis completa y sus efectos modificadores.

Cara Descripción
~Imprime el literal ~ carácter.

Forma completa: ~repetitions~.

No modifier: Prints repetitions tiempos ~ carácter.

: Modificador: Inválido.

@ Modificador: Inválido.

:@ Modificador: Inválido.

c, CImprimen un solo personaje.

Forma completa: ~c.

No modifier: Imprime el carácter del argumento formato sin prefijo.

: modificador: Difunde caracteres no impresos.

@ modificador: Prepende el legible # Prefijo.

:@ modificador: Difunde caracteres no impresos y menciona las teclas de cambio.

%Imprimen una nueva línea incondicional.

Forma completa: ~repetitions%.

No modifier: Prints repetitions rupturas de línea.

: Modificador: Inválido.

@ Modificador: Inválido.

:@ Modificador: Inválido.

"Imprime una nueva línea condicional, o nueva línea.

Forma completa: ~repetitions&.

No modifier: Si el destino no está al principio de una línea fresca, imprimir repetitions rupturas de línea; de lo contrario, impresiones repetitions - 1 línea.

: Modificador: Inválido.

@ Modificador: Inválido.

:@ Modificador: Inválido.

SilencioImprimen un separador de página.

Forma completa: ~repetitions|.

No modifier: Prints repetitions veces un separador de página.

: Modificador: Inválido.

@ Modificador: Inválido.

:@ Modificador: Inválido.

r, RO imprime el número en la base especificada (radix) o lo deletrea.

Forma completa: ~radix,minColumns,padChar,commaChar,commaIntervalR.

Con parámetros de prefijo, imprime el argumento en el radio (base).

Sin parámetros de prefijo, el argumento de formato es eliminado, ya sea en letras inglesas o en números romanos.

No modifier: Imprime el argumento como un número de inglés.

: modificador: Habla el argumento en números ordinal inglés.

@ modificador: Imprime el argumento en números romanos usando el formato romano habitual (por ejemplo, 4 = IV).

:@ modificador: Imprime el argumento en números romanos usando el formato romano antiguo (por ejemplo, 4 = IIII).

d, DImprime el argumento en el radio decimal (base = 10).

Forma completa: ~minColumns,padChar,commaChar,commaIntervald.

No modifier: Impresos como número decimal sin + (plus) señal o separador de grupo.

: modificador: Usa comas como separador de grupo.

@ modificador: Prepende la señal.

:@ modificador: Prepende el signo y utiliza comas como separador de grupo.

b, BImprime el argumento en el radio binario (base = 2).

Forma completa: ~minColumns,padChar,commaChar,commaIntervalb.

No modificador: Impresos como número binario sin + (plus) señal o separador de grupo.

: modificador: Usa comas como separador de grupo.

@ modificador: Prepende la señal.

:@ modificador: Prepende el signo y utiliza comas como separador de grupo.

o, OImprime el argumento en el radio octal (base = 8).

Forma completa: ~minColumns,padChar,commaChar,commaIntervalo.

No modificador: Impresos como número de octal sin + (plus) señal o separador de grupo.

: modificador: Usa comas como separador de grupo.

@ modificador: Prepende la señal.

:@ modificador: Prepende el signo y utiliza comas como separador de grupo.

x, XImprime el argumento en el radio hexadecimal (base = 16).

Forma completa: ~minColumns,padChar,commaChar,commaIntervalx.

No modifier: Impresos como número hexadecimal sin + (plus) señal o separador de grupo.

: modificador: Usa comas como separador de grupo.

@ modificador: Prepende la señal.

:@ modificador: Prepende el signo y utiliza comas como separador de grupo.

f, FImprime el argumento como un flotador en notación de punto fijo.

Forma completa: ~width,numDecimalPlaces,scaleFactor,overflowChar,padCharf.

No modifier: Impresos como punto fijo sin + (plus) señal.

: Modificador: Inválido.

@ modificador: Prepende la señal.

:@ Modificador: Inválido.

e, EImprime el argumento como un flotador en notación exponencial.

Forma completa: ~width,numDecimalPlaces,numDigits,scaleFactor,overflowChar,padChar,exponentChare.

No modifier: Impresos como exponencial sin + (plus) señal.

: Modificador: Inválido.

@ modificador: Prepende la señal.

:@ Modificador: Inválido.

g, GImprime el argumento ya sea como flotador en punto fijo o notación exponencial, eligiendo automáticamente.

Forma completa: ~width,numDecimalPlaces,numDigits,scaleFactor,overflowChar,padChar,exponentCharg.

No modifier: Impresos como punto fijo o exponencial sin + (plus) señal.

: Modificador: Inválido.

@ modificador: Prepende la señal.

:@ Modificador: Inválido.

$Imprime el argumento según las convenciones monetarias.

Forma completa: ~width,numDigits,minWholeDigits,minTotalWidth,padChar$.

No modificador: Impresos en convenios monetarios sin + (plus) firma o relleno.

: modificador: Prepende el letrero antes de padding caracteres.

@ modificador: Prepende la señal.

:@ Modificador: Inválido.

a, AImprimen el argumento de una manera humana.

Forma completa: ~minColumns,colInc,minPad,padChara.

Sin modificador: Impresta la salida humana sin justificación.

: modificador: Impresos NIL como lista vacía () en lugar de NIL.

@ modificador: Pads a la izquierda en lugar del lado derecho.

:@ modificador: Pads a la izquierda e impresiones NIL como ().

s, SImprime el argumento de una manera compatible con el read función.

Forma completa: ~minColumns,colInc,minPad,padChars.

No modifier: Prints read-compatible sin justificación.

: modificador: Impresos NIL como lista vacía () en lugar de NIL.

@ modificador: Pads a la izquierda en lugar del lado derecho.

:@ modificador: Pads a la izquierda e impresiones NIL como ().

w, WImprime el argumento de acuerdo con las variables de control de la impresora.

Forma completa: ~w.

No modifier: Impresos de acuerdo con las variables de control actualmente establecidas.

: modificador: Permite bastante impresión.

@ modificador: Ignora el nivel de impresión y las restricciones de longitud.

:@ modificador: Ignora el nivel de impresión y las restricciones de longitud y permite una impresión bonita.

¿Qué?Imprime un descanso de línea de acuerdo con las bonitas reglas de la impresora.

Forma completa: ~_.

No modifier: Imprime un descanso de línea si se supera una sola línea.

: modificador: Imprimen una ruptura de línea si ninguna línea precedió.

@ modificador: Usa un compacto (Miser) estilo.

:@ modificador: Siempre inserta un descanso de línea.

c)Justifica la salida.

Forma completa: ~minColumns,colInc,minPad,padChar<expression~>.

No modificador: Izquierda justifica la salida.

: modificador: Agrega el relleno izquierdo (=justifica derecho).

@ modificador: Agrega el relleno derecho (=justifica la izquierda).

:@ modificador: Centro el texto.

i, IIndentes un bloque lógico.

Forma completa: ~i.

No modificador: Comienza la identificación del primer personaje.

: modificador: Indents starting from the current output position.

@ Modificador: Inválido.

:@ Modificador: Inválido.

/Difunde la operación de formato a una función definida por el usuario. La función debe aceptar al menos cuatro parámetros: (1) El flujo o cadena ajustable para imprimir a, (2) el argumento formato para procesar, (3) un valor booleano que es T si : modificador fue suministrado, y (4) un valor booleano que es T si @ El modificador fue suministrado. Además, se pueden especificar cero o más argumentos si la función también permite parámetros de prefijo.

Forma completa: ~prefixParams/function/.

No modifier: Depende de la implementación de la función.

: modificador: Depende de la aplicación de la función.

@ modificador: Depende de la aplicación de la función.

:@ modificador: Depende de la aplicación de la función.

t, TMueva el cursor de salida a una columna dada o a una distancia horizontal.

Forma completa: ~columnNumber,columnIncrementt.

No modificador: Se mueve a la columna especificada.

: modificador: Orientes en la sección.

@ modificador: Mueva el cursor relativo a la posición actual.

:@ modificador: Orientes relativos a la sección.

*Navega a través de los argumentos de formato.

Forma completa: ~numberOfArgs*.

No modificador: Omita el numberOfArgs argumentos de formato.

: modificador: Moveos numberOfArgs atrás.

@ modificador: Se mueve al argumento en el índice numberOfArgs.

:@ Modificador: Inválido.

[Imprime una expresión basada en una condición. Estas expresiones, o cláusulas, están separados por ~; directiva, y una cláusula por defecto se puede indicar utilizando ~:; como su separador líder. El número de cláusulas permitidas depende de la variedad concreta de esta directiva según lo indicado por su modificador o modificador. Toda la porción condicional debe ser terminada con una ~].

Forma completa: ~[clause1~;...~;clauseN~:;defaultClause~].

Existe una forma alternativa, válida sólo sin modificadores, que reubica el índice de la cláusula para seleccionar, selectionIndex, desde los argumentos de formato a un parámetro prefijo:

Forma completa: ~selectionIndex[clause1~;...~;clauseN~:;defaultClause~].

Esta sintaxis se felicita especialmente en conjunto con el carácter especial del parámetro prefijo # que equipara el elemento seleccionado con el número de argumentos de formato dejados para procesar. Una directiva de este tipo permite un modelado muy conciso de múltiples selecciones.

No modifier: El argumento formato debe ser un índice de entero basado en cero, su valor es el de la cláusula para seleccionar e imprimir.

: modificador: Selecciona la primera cláusula si el argumento formato es NILDe lo contrario, el segundo.

@ modificador: Sólo procesa la cláusula si el argumento formato es T, de lo contrario se salta.

:@ Modificador: Inválido.

{}Iterates over one or more format arguments and prints these. La porción iterativa debe cerrarse con una ~} directiva. Si la directiva ~^ se encuentra dentro de la porción adjunta, cualquier contenido después de que se consume sólo si el elemento actual no es el último en la lista procesada. Si el parámetro prefijo numberOfRepetitions se especifica, su valor define el número máximo de elementos a procesar; de lo contrario todos estos se consumen.

Forma completa: ~numberOfRepetitions{expression~}.

No modifier: Se espera que un solo argumento formato sea una lista, sus elementos se consumen en orden por las directivas adjuntas.

: modificador: Espera que el argumento formato sea una lista de listas, consumiendo sus sublistas.

@ modificador: Regards all remaining format arguments as a list and consumes these.

:@ modificador: Regards all remaining format arguments as a list of sublists, consuming these sublists.

?Sustituye la directiva por el siguiente argumento, que se espera sea un argumento de formato, utilizando los argumentos de formato subsiguientes en la nueva porción.

Forma completa: ~?.

No modifier: Se espera que el argumento formato posterior sea una lista cuyos elementos están asociados con la cadena de control insertada.

: Modificador: Inválido.

@ modificador: Espera argumentos de formato separados en lugar de una lista de estos para la parte insertada, como se especificaría de la manera habitual.

:@ Modificador: Inválido.

()Modifica el caso de la cadena cerrada.

Forma completa: ~(expression~).

No modifier: Convierte todos los caracteres en caso inferior.

: modificador: Capitaliza todas las palabras.

@ modificador: Capitaliza la primera palabra sólo, convierte el resto en caso inferior.

:@ modificador: Convierte todos los caracteres en mayúscula.

p, PImprime un sufijo singular o plural dependiendo del argumento de formato numérico.

Forma completa: ~p.

No modificador: No imprime nada si el argumento es igual a 1, de lo contrario se imprime s.

: modificador: Regresa al último argumento de formato consumido, imprimiendo nada si fuera 1, de lo contrario imprimiendo s.

@ modificador: Imprime un y si el argumento es igual a 1, de lo contrario imprimir ies.

:@ modificador: Vuelve al último argumento de formato consumido, impresión y si fuera 1 otra impresión ies.

^Utilizado en una directiva de iteración ~{...~} para terminar el procesamiento del contenido adjunto si no siguen otros argumentos de formato.

Forma completa: ~p1,p2,p3^.

La condición de terminación depende del número de parámetros de prefijo suministrados:

  • Si no se especifica ningún parámetro prefijo, la directiva cesa si los argumentos cero permanecen en proceso.
  • Si un parámetro prefijo p1 se especifica, la directiva cesa si p1 resuelve a cero.
  • Si dos parámetros de prefijo p1 y p2 se especifica, la directiva cesa si p1 iguales p2.
  • Si tres parámetros de prefijo p1, p2 y p3 se especifica, la directiva cesa si sostiene: p1p2p3.

No modifier: Funciona como se describe.

: Modificador: Inválido.

@ Modificador: Inválido.

:@ Modificador: Inválido.

NewlineSaltar o retener las roturas de línea y espacios blancos adyacentes en una cadena de control multilínea.

Forma completa: ~Newline.

No modifier: Saltar la ruptura de línea inmediatamente siguiente y espacios blancos adyacentes.

: modificador: Saltar la ruptura de línea inmediatamente después, pero conserva espacios blancos adyacentes.

@ modificador: Retiene la ruptura de línea inmediatamente después, pero salta espacios blancos adyacentes.

:@ Modificador: Inválido.

Ejemplo

Un ejemplo de C printf La llamada es la siguiente:

 printf()"Color %s, número1 %d, número2 %05d, hex %x, flotador %5.2f, valor sin asignar %u.n", "rojo", 123456, 89, 255, 3.14, 250);

Utilizando Common Lisp, esto equivale a:

 ()formato t "Color ~A, number1 ~D, number2 ~5,'0D, hex ~X, flota ~5,2F, unsigned value ~D.~%" "rojo" 123456 89 255 3.14 250) ;; impresiones: Color rojo, número1 123456, número2 00089, hex FF, flotar 3.14, valor sin firmar 250.

Otro ejemplo sería imprimir cada elemento de la lista delimitado por comas, lo que se puede hacer usando ~{, ~^ y ~}:

 ()Deja (()comestibles '()huevos pan mantequilla zanahorias)) ()formato t "... comestibles) ; Impresos en mayúscula ()formato t "... comestibles) ; Capitaliza la producción ;; impresiones: EGGS, BREAD, BUTTER, CARROTS. ;; impresiones: Huevos, pan, mantequilla, carros.

Tenga en cuenta que no sólo es la lista de valores iterados directamente por format, pero las comas correctamente se imprimen entre artículos, no después ellos. Un ejemplo aún más complejo sería imprimir una lista usando la frase inglesa consuetudinaria:

()Deja (()plantilla "Los ganadores afortunados fueron: ~# [Ninguno]; ~S~; ~S and ~S~ ~;~@{~#[~; and~] - Sí.) ()formato Nil plantilla) ; ⇒ "Los ganadores afortunados fueron: ninguno." ()formato Nil plantilla 'foo) ; ⇒ "Los ganadores afortunados fueron: FOO." ()formato Nil plantilla 'foo 'bar) ; ⇒ "Los afortunados ganadores fueron: FOO y BAR." ()formato Nil plantilla 'foo 'bar 'baz) ; ⇒ "Los afortunados ganadores fueron: FOO, BAR y BAZ." ()formato Nil plantilla 'foo 'bar 'baz 'quux) ; ⇒ "Los afortunados ganadores fueron: FOO, BAR, BAZ y QUUX." )

La capacidad de definir una nueva directiva a través de ~/functionName/ proporciona los medios para la personalización. El siguiente ejemplo implementa una función que imprime una cadena de entrada en minúsculas, mayúsculas o estilo inverso, permitiendo también una configuración del número de repeticiones.

()defun mydirective ()destino formato-argumento colon-modificador-supplied-p a-sign-modificador-supplied-p " Opcional " ()repeticiones 1) "Esta función representa un callback adecuado como directiva en un "formato" invocación, esperando una cuerda como su FORMAT-ARGUMENT para imprimir REPETITIONS número de veces a la DESTINACIÓN. -... Las banderas COLON-MODIFIER-SUPPLIED-P y AT-SIGN-MODIFIER-SUPPLIED-P esperar un Boolean generalizado cada uno, siendo los representantes de los Modificadores ``:'' y ``@' respectivamente. Su influencia se define como sigue: - Si no se establece ningún modificador, el FORMAT-ARGUMENT se imprime sin nuevas modificaciones. - Si el modificador de colon se establece, pero no el modificador de la señal, el FORMAT-ARGUMENT se convierte en minúscula antes de imprimir. - Si el modificador está establecido, pero no el colonmodificador, el FORMAT-ARGUMENT se convierte en mayúscula antes de imprimir. - Si ambos modificadores están establecidos, el FORMAT-ARGUMENT se revierte antes Impresión. -... El número de veces que se imprime la cadena FORMAT-ARGUMENT determinado por el parámetro prefijo REPETITIONS, que debe ser un número entero no negativo y predeterminado a uno." ()Declara ()Tipo ()o nulo ()eql T) streaming cuerda) destino) ()Declara ()Tipo T formato-argumento) ()Declara ()Tipo T colon-modificador-supplied-p) ()Declara ()Tipo T a-sign-modificador-supplied-p) ()Declara ()Tipo ()entero 0 *) repeticiones)  ()Deja (()cadena a impresión formato-argumento) ()Declara ()Tipo cuerda cadena a impresión)  ; Ajuste la STRING-TO-PRINT basada en los modificadores. ()cond (()y colon-modificador-supplied-p a-sign-modificador-supplied-p) ()setf cadena a impresión ()inversión cadena a impresión)) ()colon-modificador-supplied-p ()setf cadena a impresión ()maleta de cadena cadena a impresión)) ()a-sign-modificador-supplied-p ()setf cadena a impresión ()maleta de cuerda cadena a impresión)) ()T NIL)  ()bucle repetición repeticiones do ()formato destino "~a" cadena a impresión))); Imprimir "Hola" una sola vez.()formato T "~/mydirective/" "Hola"); Imprimir "Hola" tres veces.()formato T "~3/mydirective/" "Hola");; Imprimir una maleta inferior "Hola" (= "hola") tres veces.()formato T "~3:/mydirective/" "Hola");; Imprimir una maleta superior "Hola" (= "HELLO") tres veces.()formato T "~3@/mydirective/" "Hola");; Imprimir un "Hola" revertido (= "olleH") tres veces.()formato T "~3:@/mydirective/" "Hola")

Si bien format es algo infame por su tendencia a volverse opaco y difícil de leer, proporciona una sintaxis notablemente concisa pero poderosa para una necesidad común y especializada.

Hay disponible una tabla de resumen FORMATO de Common Lisp.

Libros

  • Common Lisp HyperSpec Sección 22.3
  • Capítulo de Lisp Común 18. Un poco de formación Recetas

Contenido relacionado

Spl (Unix)

spl es el nombre de una colección de rutinas o macros del kernel de Unix utilizadas. para cambiar el nivel de prioridad de interrupción. Históricamente...

PERLA (lenguaje de programación)

PEARL, o lenguaje en tiempo real de automatización de procesos y experimentos, es un lenguaje de programación diseñado para realizar múltiples tareas y...

Lógica de primer orden

Lógica de primer orden: también conocida como lógica de predicados, lógica cuantificacional y cálculo de predicados de primer orden—es una colección...

Red semántica

Una red semántica, o red de marcos, es una base de conocimiento que representa relaciones semánticas entre conceptos en una red. Esto se utiliza a menudo...

Gramática libre de contexto

En la teoría del lenguaje formal, una gramática independiente del contexto es una gramática formal cuyas reglas de producción son de la...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save