I am a bit confused about using macros like with-html. Let's say if I want to produce an html with my post parameter value in it. Just saying (:p (post-parameter "foo")) won't put the value in the <p> tag.
On the other hand saying (:p (format t "~a" (post-parameter "foo"))) or (:p (esc (post-parameter "foo"))) will produce the expected result. Same goes with
(:p
      (esc (with-output-to-string (s)
                      (format s "~a" (post-parameter "foo")))))

My question is what's common about the latter examples that makes a printing possible? Does it mean that all printing within with-html should happen to *standard-output* and the esc function  redirects it to it?

What package should I look at to have a better understanding of it?

Thank you!
Andrew