(in-package :car)
;;;; ACL2 builtins (for automatic guards)
(defun zp (obj) (zerop obj))
(defun proper-consp (obj) "
:doc acl2-built-ins
"
(and obj (consp obj)
(null (cdr (last obj)))))
;;;; graphviz dot support
(defun dot-stobj (stobj &optional (stream t))
(loop initially (format stream "digraph {~%")
for node in (cdr (assoc 'nodes stobj))
for exits = (cdr (assoc 'exits node))
for id = (cdr (assoc 'id node))
do (loop for exit in exits
do (format stream "~d -> ~d;~%" id exit))
finally (format stream "}~%")))
(defun look (stobj)
(with-open-file (out #p"tmp.dot" :direction :output)
(dot-stobj stobj out))
(uiop:run-program "dot -Tpng tmp.dot > tmp.png")
(uiop:run-program "feh tmp.png")
(delete-file "tmp.dot"))