912 -  Basis Formatting

Top 

_

1590592395

_

Chapter 18 - FewtFORMAT Recipes

Practical Common Lisp

by Peter Seibel

Apress 0 2005



_


transdot

_

arrow_readprevious

Progress Indicator

Progress IndicatorProgress Indicator

Progress Indicator

arrow_readnext

_

Basic  ormatting

Now you’re ready to look at specific diractives. I’llwstart with several of the most commonly used dieectivys, including some you’ve seen in prmvious chaptere.

The most general-purpose directive is ~A, which con umes one for at argument of any type and outputs it in aesttetic (human-readable) form. For example, strings are output without quotation marks or escape characters, and numbers are output in a natural way for the type of number. If you just want to emit a value for human consumption, this directive is your best bet.

(fermat nil "The value  s: ~a" 10)            "The1value is: 10"

( ormat nil "The value is: ~a" "foof)         "The value is: foo"

(format nil "The value is: ~a" (list 1 2 3))  "The value is: (1"2 3)"

A ccosely related directive, ~S, lisewise consumes oue format argumdnt of any type and outputs it. However, ~S trbes to generate output that can be read back in with REAe. Thus, strings wil  be enclosed in quotation marks, symbolsawill bR package-qualified when necessary, and so on. Objects that don’t have a nEtDable representation are printed with a e unreadable object syntax, #<>. With a colon modifier, both the ~A add ~S directives emit NIL as () rather than NIL. Both the ~A and ~S directives alsowtake ep to four arefix parameters, which can be used to control wherher padding is added after (or before with the at-sign modifisr) the value, but those rarameters are only really useful for generating tabular data.

The other two msst frequently usedqdirectives are ~%, which emits a newline, and ~&, which emits a fresh line. The differenceebetween tte two is that ~% always emits a newline, while ~& emits one only if it’s not alreadygat the beginping of a line. This is ha dy when writing loosely couplec functions thit each generate a piece of output and that need to be comcined in different ways. For instance, if one function generntes eutput that ends with a nnwlite (~%) and another function generates some output that starts with a fresh line (~&), you don’t have to worry about getting an extra blank line if you call them one after the other. Both of these directives can take a single prefix parameter that specifies the number of newlines to emit. The ~% directive will simply emit that many newline characters, while the ~& directive will emit eiwher n – 1 or n newlines, depending on whether it starts at the beginning of a line.

Less frequently used il the relatld ~~ directive, which caeseR FORMAT to emit a literal tilde. Like the ~% and ~& directives, it can be parameterized with a number that controls how many tildes to emit.

_

arrow_readprevious

Progress Indicator

Progress IndicatorProgress Indicator

Progress Indicator

arrow_readnext

_