Major Section: ACL2-BUILT-INS
Here is a typical application of observation
.
ACL2 !>(let ((ctx 'top-level) (name 'foo)) (observation ctx "Skipping processing of name ~x0." name)) ACL2 Observation in TOP-LEVEL: Skipping processing of name FOO. <state> ACL2 !>
Observation
prints an initial ``ACL2 Observation...:
'', and then
prints the indicated message using formatted printing (see fmt). Notice in
the example above that evaluation of a call of observation
returns
state
. Indeed, observation
is actually a macro whose expansion
takes and returns the ACL2 state
. A similar utility,
observation-cw
, is available that does not take or return state
;
rather, it returns nil
as the suffix ``cw
'' suggests that a ``comment
window'' is the target of this printing, rather than the state. For example:
ACL2 !>(let ((ctx 'top-level) (name 'foo)) (observation-cw ctx "Skipping processing of name ~x0." name)) ACL2 Observation in TOP-LEVEL: Skipping processing of name FOO. NIL ACL2 !>
Observation-cw
takes exactly the same arguments as observation
, but
observation-cw
does its printing in a so-called ``wormhole'';
see wormhole.
General Forms: (observation ctx fmt-string fmt-arg1 fmt-arg2 ... fmt-argk) (observation-cw ctx fmt-string fmt-arg1 fmt-arg2 ... fmt-argk)where
ctx
generally evaluates to a symbol (but see below), and
fmt-string
together with the fmt-argi
are suitable for passing to
fmt
. Output begins and ends with a newline.Recall from the example above that the output from a call of observation
(or observation-cw
) begins with ``ACL2 Observation
'' and additional
characters ending in ``:
'', for example `` in TOP-LEVEL:
'',
followed by formatted output produced from fmt-string
with the given
fmt-argi
. The characters printed immediately following the string
``ACL2 Observation
'' depend on the value of ctx
. If ctx
is
nil
, nothing is printed. If ctx
is a non-nil
symbol, it is
printed using fmt
directive ~x
. If ctx
is a cons
pair
whose car
is a symbol, formatted printing is applied to the string
"(~x0 ~x1 ...)", where #\0
and #\1
are bound respectively to
that car and cdr. Otherwise, ctx
is printed using fmt
directive
~@
.
We next discuss situations in which printing is inhibited for observation
and observation-cw
. No printing is done when observation
is among
the inhibited output types; see set-inhibit-output-lst. Moreover, no
printing is done by observation
during include-book
. If you want
to avoid printing from observation-cw
during include-book
, then you
need to manage that yourself.