(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"))