object | an element of the list being printed in the lexically current logical block, or nil. |
Pops one element from the list being printed in the lexically current logical block, obeying *print-length* and *print-circle* as described below.
Each time pprint-pop is called, it pops the next value off the list passed to the lexically current logical block and returns it. However, before doing this, it performs three tests:
If the remaining ‘list’ is not a list,
".
" is printed followed by the remaining ‘list.’
(This makes it easier to write printing functions that
are robust in the face of malformed arguments.)
If *print-length* is non-nil,
and pprint-pop has already been called *print-length* times
within the immediately containing logical block,
"...
" is printed.
(This makes it easy to write printing functions that properly handle
*print-length*.)
If *print-circle* is
non-nil, and the remaining list is a circular (or shared) reference,
then ".
" is printed followed by an appropriate
"#n#
" marker.
(This catches instances of cdr circularity and sharing in lists.)
If either of the three conditions above occurs, the indicated output is printed on the pretty printing stream created by the immediately containing pprint-logical-block and the execution of the immediately containing pprint-logical-block is terminated except for the printing of the suffix.
If pprint-logical-block is given a ‘list’ argument of nil—because it is not processing a list—pprint-pop can still be used to obtain support for *print-length*. In this situation, the first and third tests above are disabled and pprint-pop always returns nil. See Examples of using the Pretty Printer—specifically, the pprint-vector example.
Whether or not pprint-pop is fbound in the
global environment is implementation-dependent;
however, the restrictions on redefinition and shadowing of
pprint-pop are the same as for symbols in the COMMON-LISP
package
which are fbound in the global environment.
The consequences of attempting to use pprint-pop outside
of pprint-logical-block are undefined.
Might cause output to the pretty printing stream associated with the lexically current logical block.
*print-length*, *print-circle*.
An error is signaled (either at macro expansion time or at run time) if a usage of pprint-pop occurs where there is no lexically containing pprint-logical-block form.
The consequences are undefined if pprint-pop is executed outside of the dynamic extent of this pprint-logical-block.
It is frequently a good idea to call pprint-exit-if-list-exhausted before calling pprint-pop.