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.