Earlier quoted context omitted.
Also, you might find this slow little utility for converting a bunch of stuff into strings. It will do the job nicely, and it accepts every Lisp type. (defun str (&rest strings) (apply 'concatenate 'string (loop for x in strings collecting (format nil "~a" x)))) You can use it like this: (shell (str "dot -Tpng -O " fname)) You might also find that WITH-OPEN-FILE arguments can get a little unwieldy to type in the repl…
How about simply this? (defun str (&rest strings) (format nil "~{~A~}" strings))
FWIW, my first Lisp programs where board-games and I learned quite a bit about recursion trying to format ASCII art in curses. If I knew FORMAT had control, I wouldn't have learned much lisp so quickly, since quirky little DSLs are fascinating.