Major Section: IO
General Form: (without-evisc form)where
form is any expression to evaluate. The effect is to evaluate
form as though the without-evisc wrapper were absent, except that
expressions are printed in full for the ensuing output, regardless of the
current evisc-tuples (see set-evisc-tuple). See set-iprint for an example.
More precisely, without-evisc binds the term-evisc-tuple, ld-evisc-tuple,
and abbrev-evisc-tuple to nil (see set-evisc-tuple). It does not modify
the trace evisc-tuple, so trace output is not modified by without-evisc.
Also note that calls of printing functions such as fmt that include
explicit evisc-tuples will not have those evisc-tuples overridden. The
following example illustrates this point.
ACL2 !>(without-evisc
(fms "~x0~%"
(list (cons #0 '((a b ((c d)) e f g) u v w x y)))
*standard-co*
state
(evisc-tuple 2 3 nil nil)))
((A B # ...) U V ...)
<state>
ACL2 !>
We conclude with two remarks. (1) A call of without-evisc on expression
exp actually invokes a specialized call of ld on a one-element list
containing exp, which prints the value returned by evaluation of exp
but actually returns the useless value (mv nil :invisible state). So do
not use without-evisc in programs; just use it at the top level of the
ACL2 read-eval-print loop, or at least the top level of ld. (2) Even
when using without-evisc, if the ACL2 logical world is part of the value
returned, it will be printed in abbreviated form because the ACL2
read-eval-print loop always arranges for this to be the case, regardless of
the ld-evisc-tuple. For example:
ACL2 !>(without-evisc (w state)) <world> ACL2 !>
An alternative to the use of without-evisc is to explore large objects
using the ACL2 function (walkabout object state). Some brief
documentation is printed when you enter an interactive loop upon evaluating a
call of walkabout. We may add documentation for walkabout if that
is requested.